我的域对象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
但我需要再次加载实体。有没有更好的方法来获得/保持正确的参考?
答案 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; }
}