在Post之后将下拉列表的描述字段返回到模型

时间:2013-01-10 15:07:00

标签: razor asp.net-mvc-4

在我的模型中,我有一个类别为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来找到正确的元素。

是否可能很难将描述字段也返回到模型中,以便我可以使用此字段?

如果是这样的话?

1 个答案:

答案 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从底层后端检索描述。