如何将模型绑定到剑道组合框以便使用模型验证
本文关键字:模型 组合 验证 绑定 | 更新日期: 2023-09-27 18:35:50
我正在尝试使用我的视图模型来验证客户端和服务器端的表单。我已经完成了除我的剑道组合框之外的所有验证工作。我已将模型绑定到多选,但我不知道如何区分列表和所选值。
组合框:
@(Html.Kendo().ComboBox()
.Name("roleRequest_UnavailableRoles")
.BindTo(new SelectList(Model.roleRequest.UnavailableRoles, "Value", "Text"))
.HtmlAttributes(new { name="addRoleName", style = "width:250px", required = true, roleValidationMessage = "foo" })
.Value(Model.roleRequest.roleName)
.DataTextField("Text")
.DataValueField("Value")
.Filter(FilterType.StartsWith)
.Placeholder("Select Role...")
.AutoBind(false)
.Suggest(true)
)
查看模型:
[Required]
public string roleName { get; set; }
[Required]
public string usersName { get; set; }
[Required]
public string application { get; set; }
[Required]
public string reasons { get; set; }
public virtual IEnumerable<SelectListItem> UnavailableRoles
{
get
{
var unavailableList = new List<Role>();
unavailableList = RoleHelper.GetUnavailableRoles(usersName, application);
var unavailableRolesList = (unavailableList.Distinct());
var UnavailableRoles = new List<SelectListItem>();
foreach (var role in unavailableRolesList)
{
UnavailableRoles.Add(new SelectListItem
{
Value = role.RoleID.ToString(),
Text = role.RoleName
});
}
return new SelectList(UnavailableRoles, "Value", "Text");
}
}
控制器: [维基邮报] public ContentResult RoleRequest(AddRoleRequestViewModel viewModel) { if (ModelState.IsValid) { 返回内容("1"); } 返回内容("); }
上面的代码确实可以编译,但如果组合框中没有选择任何项目,我无法让控制器返回无效。 谁能解释如何解决这个问题?
任何帮助将不胜感激。
如果使用Html.Kendo().ComboBoxFor()
则可以将其绑定到类似于以下内容的模型属性:
@(Html.Kendo().ComboBoxFor(m => m.UnavailableRoles)
.Name("roleRequest_UnavailableRoles")
.BindTo(new SelectList(Model.roleRequest.UnavailableRoles, "Value", "Text"))
.HtmlAttributes(new { name="addRoleName", style = "width:250px", required = true, roleValidationMessage = "foo" })
.Value(Model.roleRequest.roleName)
.DataTextField("Text")
.DataValueField("Value")
.Filter(FilterType.StartsWith)
.Placeholder("Select Role...")
.AutoBind(false)
.Suggest(true)
)
请注意,执行此操作时,不需要 Name()
或 Value()
属性,因为它们将在使用ComboBoxFor()
这将负责将控件绑定到模型,并允许您使用验证。
另外,我在您的模型中遗漏了一件事:您将需要实际值的另一个属性(除了选项之外)。 我会做这样的事情:
public List<Guid> RoleIds { get; set; } // or List<int> if you're using integers
,然后将组合框更改为ComboBoxFor(x => x.RoleIds)