Как я могу проверить множественный выбор в форме MVC2? - PullRequest
2 голосов
/ 24 февраля 2010

Это похоже на действительно базовый сценарий, но я думаю , что у него нет счастливого конца.

У меня есть простой класс проекта:

public class Project 
{

    [Required(ErrorMessage = "Project title is required")]
    [DisplayName("Project Title")]
    public string Title { get; set; }

    [DisplayName("Related Categories")]
    public Category Categories { get; set; }

}

Я хочу убедиться, что выбрана хотя бы одна связанная категория. Как я могу проверить это в представлении, используя Html.EnableClientValidation () и декораторы в модели? Если это невозможно, каков запасной вариант?

В равной степени разочаровывает и, вероятно, препятствует валидации то, что я не могу сделать ...

<%= Html.ListBoxFor(m => m.Project.Categories,
                new SelectList(Model.Categories, "Id", "Name"))%>

... потому что это попытается связать значение формы Project.Categories (строковый массив) с тем, что должно быть типом Category, но не сможет (я получаю ошибку "Преобразование параметра из типа" System.String 'для типа не удалось, потому что никакой преобразователь типов не может конвертировать между этими типами "). Поэтому мне нужно изменить имя формы на что-то вроде m.Categories, таким образом, отделившись от класса Product, и, следовательно, от любой логики проверки, которой я бы хотел украсить его.

Ух ты, для меня это безумие. Мы не можем проверить простой список множественного выбора, используя декораторы MVC2?

1 Ответ

1 голос
/ 03 марта 2010

Я собираюсь попытаться ответить, так как сейчас я делаю:

В моей модели представления я поставил:

    [Required(ErrorMessage = "A category is required")]
    public IEnumerable<Category> Categories { get; set; }

Ипроверка будет происходить в пользовательском интерфейсе.Тем не менее, состояние модели по-прежнему не отображается как недопустимое в действии ... потому что имя привязки не совпадает точно, поэтому этот подход, конечно, не очень надежен как есть, но я думаю, что это можно решить.

Кроме того, это приводит к интересному вопросу о возможности использования отношения 1: 1 Action: ViewModel.Таким образом, вы можете установить конкретную проверку вида в вашей модели представления.Это не то, что полагаться на проверку сущностей, что будет частью более широкой проверки модели, и это направление, в котором MVC 2 готовится к окончательному выпуску.* Проверка модели в MVC 2 RC 2: http://bradwilson.typepad.com/blog/2010/01/input-validation-vs-model-validation-in-aspnet-mvc.html

1: 1 Просмотр модели: подход к действию: http://www.lostechies.com/blogs/jimmy_bogard/archive/2009/06/29/how-we-do-mvc-view-models.aspx

...