问题的下拉列表中MVC
问题描述:
问题与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。
请帮助我,让我知道我在这做错了什么。
感谢您在这方面的帮助。
答
对于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代码应该是的两部分的操作方法。
彼得感谢您指出我犯的错误,我将其更改为财产。我能够获得所选App的值,但AppSelectionList仍显示为空。你能不能让我知道为什么是 –
请看我的更新。这几乎是一个单独的问题,但仍然如此。 –
感谢Peter的更新,并以更好的方式理解事物。 –