0

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

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

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

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

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

4

1 回答 1

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
)

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

以下是您的视图模型的外观:

public class MyViewModel
{
    public int ChainId { get; set; }
    public IEnumerable<SelectListItem> AvailableChains { get; set; }
}
于 2013-02-17T22:40:40.727 回答