0

在我的模型中,我有一个类别类型的字段。

...
public Category Category { get; set; }
...

Category 类与此类似:

public class Category 
{
    public int Id { get; set; }
    public string Description { get; set; }
}

在我看来,我正在为 DropDownLists 使用 HtmlHelper:

@Html.DropDownListFor(m => m.Category.Id, new SelectList(Model.Categories, "Id", "Description"))

当我发布我的表单时,模型上的 Category 字段设置为 Category 对象的实例,该对象的 Id 值设置正确。

描述字段为空。我知道整个类没有序列化并传递给客户端,对于复杂的类,我不一定想要这样。同样对于很多情况,我可以简单地使用 Id 来找到正确的元素。

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

如果有怎么办?

4

1 回答 1

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

于 2013-01-10T15:13:00.657 回答