2017-10-09 121 views
0

问题与MVC问题的下拉列表中MVC

新来的MVC我有MVC中的下拉列表中的问题,你可以帮我与

下面是代码的下拉列表我使用从数据库获取数据

public static List<AppDetailsDTO> GetAllApplications() 
{ 
    string[] arrRoles = new string[] { }; 
    List<AppDetailsDTO> lstAppDetails = new List<AppDetailsDTO>(); 
    using (ApplicationSecurityContext objSecurityContext = new ApplicationSecurityContext()) 
    { 
    var appDetails = objSecurityContext.Applications.Select(app => new AppDetailsDTO() { AppId= app.id, AppName= app.name }).Distinct().ToList(); 
    if (appDetails.Count() > 0) 
    { 
     lstAppDetails = appDetails; 
    } 
    } 
return lstAppDetails; 
} 

AppDetailsDTO类看起来如下

public class AppDetailsDTO 
{ 
    public int AppId { get; set; } 
    public string AppName { get; set; } 
} 

视图模型这是在视图中使用是如下

public class ClientApplicationViewModel 
{ 
    public string selectedAppID; 
    public SelectList AppSelectionList { get; set; } 
} 

控制器代码是如下

[HttpGet] 
public ActionResult AssignApplication() 
{ 
    List<AppDetailsDTO> lstAvailableApps = new List<AppDetailsDTO>(); 
    lstAvailableApps = SecurityDAL.GetAllApplications(); 
    ClientApplicationViewModel objModel = new ClientApplicationViewModel(); 
    objModel.AppSelectionList = new SelectList(lstAvailableApps, "AppId", "AppName"); 
    return View(objModel); 
} 

[HttpPost] 
public void AssignApplication(ClientApplicationViewModel model) 
{ 
    string id = model.selectedAppID.ToString(); 
} 

我使用视图如下

@model MVCWINDOWSAUTHENTICATION.Models.ClientApplicationViewModel 
@{ 
ViewBag.Title = "AssignApplication"; 
} 

<h2>AssignApplication</h2> 

@using (Html.BeginForm()) 
{ 
@Html.AntiForgeryToken() 
<div class="form-horizontal"> 
<h4>ClientApplicationViewModel</h4> 
<hr /> 
@Html.ValidationSummary(true, "", new { @class = "text-danger" }) 
<div class="form-group"> 
<div class="col-md-offset-2 col-md-10"> 
@Html.DropDownListFor(model => model.selectedAppID, Model.AppSelectionList, "Select Application") 
</div> 
</div> 
<div class="form-group"> 
<div class="col-md-offset-2 col-md-10"> 
<input type="submit" value="Create" class="btn btn-default" /> 
</div> 
</div> 
</div> 
} 
<div> 
@Html.ActionLink("Back to List", "Index") 
</div> 

,我的问题得到下拉列表正在填充,但当我发布表单时,它获取发布,并在控制器后的方法,但在控制器,但selectedAppID和AppSelectionList来了一个s null。

请帮助我,让我知道我在这做错了什么。

感谢您在这方面的帮助。

回答

1

对于MVC模型绑定工作,要自动从表单提交绑定的所有项目都必须性能

public class ClientApplicationViewModel 
{ 
    public string selectedAppID { get; set; } // <-- add this 
} 

在一个单独的说明,解释如AppSelectionList一般不属于该模型的一部分,因为它们不应该回发给控制器。该模型应该只包含用户选择或输入的值,而不包含可能值的列表。这种'助手'列表通常使用ViewBag中的值从控制器发送到视图。

因此,请删除模型中的AppSelectionList。在控制器中的代码就变成这样:

ViewBag.AppSelectionList = new SelectList(lstAvailableApps, "AppId", "AppName"); 

并在视图使用这样的:

@Html.DropDownListFor(model => model.selectedAppID, ViewBag.AppSelectionList, "Select Application") 

最后,如果你想填充在这两种情况下的列表(即无论是GET和POST。 ),那么ViewBag的init代码应该是的两部分的操作方法。

+0

彼得感谢您指出我犯的错误,我将其更改为财产。我能够获得所选App的值,但AppSelectionList仍显示为空。你能不能让我知道为什么是 –

+0

请看我的更新。这几乎是一个单独的问题,但仍然如此。 –

+0

感谢Peter的更新,并以更好的方式理解事物。 –