1

可以通过类别模型(下面给出示例)

public class Category { 
     public Guid Id { get; set; }; 
     public String Title { get; set; }
}

使用选择/选项?

<select id="categories" name="Category">
    <option value="Id">Text</option>
</select>

据我了解,这将正常绑定但不包括Title属性?

编辑

Viewmodel

public class EditProductModelView { 
    [Required] Category Category { get; set; }
    // other properties
}

Controller

public ActionResult Edit(EditProductViewModel model) {
    // controller logic
}

谢谢!

4

3 回答 3

1

为了绑定,我相信你必须命名 select-element Id

<select id="categories" name="Id">
    <option value="foo">Text</option>
    <option value="bar">Text</option>
</select>

如果您的操作看起来像这样:

public ActionResult YourAction(Category model) {
    var modelId = model.Id; // Will be set to the chosen value
    var title = model.Title; // Will be null
}
于 2012-11-09T14:42:56.927 回答
1

您可以为标题值添加一个隐藏的输入,并在选择选项更改时用 data-title 属性值的选项填充它

<input id="categoriesTitle" type="hidden" name="Category.Title" />
<select id="categories" name="Category.Id">
    <option value="foo" data-title="this is foo">foo</option>
    <option value="bar" data-title="I am bar">bar</option>
</select>
于 2012-11-09T14:58:18.137 回答
1

您的模型需要一个地方来获取选定的 Id,这是您放置所需属性的地方

public class EditProductModelView { 
      [Required]
     public Guid SelectedCategoryId {get;set;}
}

然后 name 必须与视图模型中的属性名称匹配:

<select id="categories" name="SelectedCategoryId">
    <option value="SomeGuidHere">Text</option>
</select>

这只是因为浏览器如何处理帖子。他们不发布文本节点,只发布选定的值,在您的情况下是 Id。

于 2012-11-12T07:26:57.537 回答