在我的模型中,我有一个类别为Category的字段。
...
public Category Category { get; set; }
...
Category类与此类似:
public class Category
{
public int Id { get; set; }
public string Description { get; set; }
}
我在我的视图中使用HtmlHelper for DropDownLists:
@Html.DropDownListFor(m => m.Category.Id, new SelectList(Model.Categories, "Id", "Description"))
当我发布我的表单时,模型上的“类别”字段将设置为类别对象的实例,该对象的Id值已正确设置。
描述字段保留为空。我知道整个类没有被序列化并传递给客户端,对于复杂的类我不一定要这样。同样在很多情况下,我可以简单地使用Id来找到正确的元素。
是否可能很难将描述字段也返回到模型中,以便我可以使用此字段?
如果是这样的话?
答案 0 :(得分:1)
是否可能很难将描述字段也返回 模型,然后我可以使用这个字段?
这样做的唯一方法是使用javascript。 HTML中没有任何内容可以让您发送<option>
标记的文本。只有值被发送到服务器。
所以基本上你必须订阅这个下拉列表的onchange
事件,检索所选元素的文本并将其填入一个具有正确名称的隐藏字段。
因此,隐藏字段在表单中具有正确的名称:
@Html.HiddenFor(m => m.Category.Description, new { id = "description" })
然后为您的下拉列表提供ID:
@Html.DropDownListFor(
m => m.Category.Id,
new SelectList(Model.Categories, "Id", "Description"),
new { id = "category" }
)
最后订阅:
$('#category').change(function() {
var description = $(this).find('option:selected').text();
$('#description').val(description);
});
但如果您希望我对您完全诚实:请不要这样做,只需使用发送到您服务器的所选ID从底层后端检索描述。