DropDownList为什么它获得Key而没有其他东西

时间:2011-06-01 21:31:18

标签: asp.net-mvc-3 drop-down-menu

我的模型中有一个非常简单的属性:

enter image description here

现在这个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:

现在另一个问题是,如果我选择第二种方法,它会搞砸不显眼的验证。虽然我将能够根据所选的身份获得正确的训练营。

1 个答案:

答案 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" />
}