【问题标题】:How to bind a model to a kendo Combobox in order to use the models validatation?如何将模型绑定到剑道组合框以使用模型验证?
【发布时间】:2015-01-02 12:18:36
【问题描述】:

我正在尝试使用我的 viewModel 来验证客户端和服务器端的表单。除了我的 Kendo Combobox 之外,我已经完成了所有验证工作。我已将模型绑定到多选,但我不知道如何区分列表和所选值。

组合框:

@(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");
        }
    }

控制器: [HttpPost] public ContentResult RoleRequest(AddRoleRequestViewModel viewModel) { 如果(模型状态。IsValid) { 返回内容(“1”); } 返回内容(“”); }

上面的代码确实可以编译,但是如果在组合框中没有选择任何项目,我无法让控制器返回无效。谁能解释如何解决这个问题?

任何帮助将不胜感激。

【问题讨论】:

    标签: c# asp.net-mvc-5 kendo-asp.net-mvc kendo-combobox


    【解决方案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 更改为 ComboBoxFor(x =&gt; x.RoleIds)

    【讨论】:

      猜你喜欢
      • 2013-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多