我的模型中有一个非常简单的属性:
现在这个dropDown不能正常工作
@Html.DropDownListFor(m => m.Camp, new SelectList(ViewBag.Camps, "Id", "Name"))
它会返回null
而非选定的Camp,但如果我将其更改为:
@Html.DropDownListFor(m => m.Camp.Id, new SelectList(ViewBag.Camps, "Id", "Name"))
它会返回一个Camp
对象,其中Id
正确,但Name
仍为null
。
为什么?
UPD:
现在另一个问题是,如果我选择第二种方法,它会搞砸不显眼的验证。虽然我将能够根据所选的身份获得正确的训练营。
答案 0 :(得分:1)
这是正常的。只有Id
发布到控制器操作。这就是内部表单的下拉工作方式。所以你可以希望到达那里。然后,您将使用此Id
从数据库中获取相应的Camp对象:
[HttpPost]
public ActionResult Foo([Bind(Prefix = "Camp")]int id)
{
Camp camp = Repository.GetCamp(id);
...
}
另外请摆脱这个ViewBag
并使用真实的视图模型:
public class CampViewModel
{
public int Id { get; set; }
public IEnumerable<SelectListItem> Camps { get; set; }
}
并在控制器中:
public ActionResult Index()
{
var model = new CampViewModel
{
Camps = Repository.GetCamps().Select(x => new SelectListItem
{
Value = x.Id.ToString(),
Text = x.Name
})
};
return View(model);
}
[HttpPost]
public ActionResult Index(int id)
{
Camp camp = Repository.GetCamp(id);
...
}
和视图:
@model CampViewModel
@using (Html.BeginForm())
{
@Html.DropDownListFor(
x => x.Id,
new SelectList(Model.Camps, "Value", "Text")
)
<input type="submit" value="OK" />
}