C#对象引用从Html到Controller

时间:2013-02-17 22:37:20

标签: asp.net-mvc asp.net-mvc-3 asp.net-mvc-4

我的域对象Store包含对象Chain的引用:

public class Store
{
    public Chain Chain { get; set; }
}

在创建新商店时,可以设置相关链。我通过ViewBag传递链对象并使用Html.DropDownListFor进行选择来实现这一点:

@Html.DropDownListFor(
    x => x.Chain,
    new SelectList(ViewBag.Chains, "Id", "Name"))

到目前为止一切顺利,但回到控制器中(提交后),链属性为null。我想我可以将DropDownList设置为Chain.Id但我需要再次加载实体。有没有更好的方法来获得/保持正确的参考?

1 个答案:

答案 0 :(得分:2)

  

有没有更好的方法来获得/保持正确的参考?

不,这就是HTML的工作方式。只有选定的值发送到服务器,您需要使用此值来加载相应的实体。请在进入ASP.NET MVC开发之前学习HTML。它会对你有所帮助。这是正确的方法:

@Html.DropDownListFor(
    x => x.Chain.Id,
    new SelectList(ViewBag.Chains, "Id", "Name")
)

嗯,作为一个真实的事实,对你完全诚实,最正确的处理方法是摆脱所有ViewBag废话,并在你的应用程序中使用真实的视图模型:

@Html.DropDownListFor(
    x => x.ChainId,
    Model.AvailableChains
)

其中AvailableChains当然是您为此视图准备的视图模型上的IEnumerable<SelectListItem>类型的属性。您应该始终使用视图模型,如果您想以正确的方式执行ASP.NET MVC,则永远不要将域模型传递给视图。

以下是您的视图模型的样子:

public class MyViewModel
{
    public int ChainId { get; set; }
    public IEnumerable<SelectListItem> AvailableChains { get; set; }
}