假设您有以下情况:
在MVC中,自动生成的LINQ-TO-SQL类可以映射代码中的关联关系,这样就可以调用链接的外部实体,例如:在我看来,我可以:
<% foreach (var locality in Model.Localities) { %>
<tr>
<td>
<%: locality.LocalityName %>
</td>
<td>
<%: locality.State.StateName %>
</td>
<td>
<%: locality.State.Country.CountryName %>
</td>
</tr>
<% } %>
当我浏览索引操作时,这会成功呈现。
但是,我遇到了编辑操作的问题。这是代码:
<strong>Locality Name</strong>
<div class="editor-field">
<%: Html.TextBox("LocalityName", Model.Locality.LocalityName) %>
<%: Html.ValidationMessage("LocalityName")%>
</div>
<strong>Country</strong>
<div class="editor-field">
<%= Html.DropDownList("CountryID", Model.CountriesDDL, "-- select --") %>
</div>
<strong>State</strong>
<div class="editor-field">
<%= Html.DropDownList("StateID", Model.StatesDDL, "-- select--") %>
<%: Html.ValidationMessage("StateID")%>
</div>
首先,我在州的选择列表(对于StateID)旁边收到验证错误,例如“8不是有效值”。所以它没有更新。
我理解,通过阅读一些帖子(such as this one),通过设置ID来更新关系存在数据库相关问题,而解决方案似乎是设置ENTITY。 (顺便提一下,相反的建议也被分发here)。按照这个建议,我一直在查看Html.DropDownList()的重载,将列表项的“值”设置为对象本身,同时将“text”属性设置为Object.Name - 我还没有解决这个问题然而。但随着这项工作变得越来越耗时,我非常感谢一些专家的建议。
因此,我的问题是:如果我这样做,这实际上会起作用吗?是否有可能让SelectList以这种方式工作(以及如何建议?)
感谢您的时间,
添
答案 0 :(得分:0)
一般情况下,将域模型传递给View也不是一个好主意(列表视图可能除外)。
更好地使用(代理)ViewModel,它是域模型的扁平化版本。这是一个更多的工作,但工作就像一个魅力。
答案 1 :(得分:0)
尝试使用此代码填充列表,它适用于我。在这里,我正在使用产品。
<%:Html.DropDownListFor(m => m.Id, new SelectList(Model.Categories, "Id", "Name", Model.Product.CategoryId, "-Select-")%>
使用DTO显示类似内容的列表。实体可用于创建,更新,删除