可以传递类别模型(下面给出的示例)
public class Category {
public Guid Id { get; set; };
public String Title { get; set; }
}
使用select / option?
<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
}
谢谢!
答案 0 :(得分:1)
为了绑定,我相信你必须命名select元素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
}
答案 1 :(得分:1)
您可以为标题值添加隐藏输入,并在选择选项更改时用数据标题属性值填充选项
<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>
答案 2 :(得分:1)
您的模型需要一个位置来获取所选的ID,这是您放置所需属性的位置
public class EditProductModelView {
[Required]
public Guid SelectedCategoryId {get;set;}
}
然后name必须与视图模型中的属性名称匹配:
<select id="categories" name="SelectedCategoryId">
<option value="SomeGuidHere">Text</option>
</select>
这只是因为浏览器处理帖子的方式。它们不发布Text节点,只发布选定的值,在您的情况下是Id。