[英]View Model Not Binding with DropDownListFor
I am trying to have a dropdown list populated by a view model and then, on HTTPPOST, try to retrieve the selected value but the model has no data bound in the controller in post. 我试图通过视图模型填充一个下拉列表,然后在HTTPPOST上尝试检索选定的值,但是该模型在后期的控制器中没有绑定数据。 Any help would be appreciated.
任何帮助,将不胜感激。
View Model 查看模型
public class TransferViewModel
{
public IEnumerable<User> Users { get; set; }
public string SortOrder { get; set; }
public SelectList Departments { get; set; }
public SelectList Sites { get; set; }
public SelectListItem SelectedDepartment { get; set; }
public SelectListItem SelectedSite { get; set; }
public User SelectedUser { get; set; }
}
Controller 控制者
public ActionResult Sort(TransferViewModel model)
{
var users = from s in _db.Users select s;
var departments = new SelectList(_db.Departments);
var sites = new SelectList(_db.Sites);
model.Departments = departments;
model.Sites = sites;
if (model.SelectedDepartment != null)
{
users = users.Where(s => s.Department.ID == Convert.ToInt32(model.SelectedDepartment));
}
else if (model.SelectedSite != null)
{
users = users.Where(s => s.Site.ID == Convert.ToInt32(model.SelectedSite));
}
switch (model.SortOrder)
{
case "name_desc":
users = users.OrderByDescending(s => s.LName);
break;
case "dept":
users = users.OrderBy(s => s.Department.Name);
break;
case "dept_desc":
users = users.OrderByDescending(s => s.Department.Name);
break;
case "site":
users = users.OrderBy(s => s.Site.Name);
break;
case "site_desc":
users = users.OrderByDescending(s => s.Site.Name);
break;
default:
users = users.OrderBy(s => s.LName);
break;
}
model.Users = users;
model.Departments = new SelectList(_db.Departments, "ID", "Name", model.SelectedDepartment);
model.Sites = new SelectList(_db.Sites,"ID","Name", model.SelectedSite);
return View(model);
}
View 视图
@using (Html.BeginForm("Sort", "Transfer", FormMethod.Post ))
{
<p>
Display by @Html.DropDownListFor(model => model.SelectedDepartment, Model.Departments, htmlAttributes: new { @class = "form-control"})
Department
</p>
<p>
or by Location: @Html.DropDownListFor(model => model.SelectedSite, Model.Sites, htmlAttributes: new { @class = "form-control"})
</p>
<p>
<input type="submit" value="Search"/>
</p>
}
All you need to have int
properties in your model as in post the selected id for the dropdown will be posted back to the controller: 您需要在模型中具有
int
属性的所有内容,如在发布后为下拉列表选择的ID将被发布回控制器:
public class TransferViewModel
{
......................
......................
public int SelectedDepartment { get; set; }
public int SelectedSite { get; set; }
.....................
.....................
}
you are telling yourself in the action to use the ID
column for the dropdownlists to be binded as DataValueMember
: 您在操作中告诉自己使用
ID
列将下拉列表绑定为DataValueMember
:
// see that ID argument there that is binding the value which will be posted back
model.Departments = new SelectList(_db.Departments, "ID", "Name", model.SelectedDepartment);
model.Sites = new SelectList(_db.Sites,"ID","Name", model.SelectedSite);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.