Как привязать модель к кендо Combobox, чтобы использовать проверку моделей?

Я пытаюсь использовать свою модель представления для проверки формы как на стороне клиента, так и на стороне сервера. У меня работают все проверки, кроме моего 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) { if (ModelState.IsValid) { return Content("1"); } вернуть содержимое(""); }

Приведенный выше код компилируется, но я не могу заставить контроллер возвращать недействительный результат, если в поле со списком не выбран ни один элемент. кто-нибудь может объяснить, как это исправить?

Любая помощь будет принята с благодарностью.


person SlipperyBalmain    schedule 02.01.2015    source источник


Ответы (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 => x.RoleIds)

person Matt Millican    schedule 02.01.2015