В MVC2, как мне проверить поля, которых нет в моей модели данных? - PullRequest
2 голосов
/ 22 мая 2010

Я играю с MVC2 в VS 2010 и мне действительно это нравится. В приложении-песочнице, которое я начал с нуля, моя база данных представлена ​​в модели данных сущности ADO.NET и провела большую часть проверки полей в моей модели данных с использованием подхода Скотта Гатри «класс приятелей», который работал очень хорошо .

Однако в форме регистрации пользователя, которую я разработал и с которой экспериментирую, я бы хотел добавить поле «подтвердить адрес электронной почты» или «подтвердить пароль». Поскольку эти поля, очевидно, не существуют в моей модели данных, как бы я проверил эти поля на стороне клиента и на стороне сервера?

Я хотел бы реализовать что-то вроде 'Html.ValidationMessageFor', но эти поля не существуют в модели данных. Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

4 голосов
/ 25 июня 2010

Я использую модели просмотра. Я не создаю экземпляр модели данных для сохранения до тех пор, пока модель представления не будет действительной. Ниже приведен простой пример. Обратите внимание, что некоторые свойства являются моделями данных, но свойства проверки существуют только для этой модели представления (здесь база не уместна)

public class ProblemAddToDepartmentProductView : ViewModel
{
    public Problem Problem { get; set; }
    public IList<Product> AllProducts { get; set; }
    public IList<Department> AllDepartments { get; set; }
    public string ProblemId { get; set; }
    public string ProblemName { get; set; }

    [DisplayName("Choose the product:")]
    [Required(ErrorMessage = "Select the Product.")]
    public string SelectedProduct { get; set; }

    public SelectList GetProducts()
    {
        var selectList = new SelectList(AllProducts, "Id", "Name");
        return selectList;
    }
    [DisplayName("Choose the department using this problem for that product:")]
    [Required(ErrorMessage = "Select the Department.")]
    public string SelectedDepartment { get; set; }


    public SelectList GetDepartments()
    {
        var selectList = new SelectList(AllDepartments, "Id", "Name");
        return selectList;
    }

    internal class ProductSelect
    {
        public Guid Id { get; set; }
        public string Name { get; set; }
    }

}

Это также поможет увидеть его на странице:

    <fieldset>
        <legend>Fields</legend>
        <div class="editor-label">
            <%= Html.LabelFor(x => x.SelectedProduct) %>
        </div>
        <div class="editor-field">
            <%= Html.DropDownListFor(x => x.SelectedProduct, Model.GetProducts(),"--Select One--") %>
            <%= Html.ValidationMessageFor(x => x.SelectedProduct)%>
        </div>
        <div class="editor-label">
            <%= Html.LabelFor(x => x.SelectedDepartment) %>
        </div>
        <div class="editor-field">
            <%= Html.DropDownListFor(x => x.SelectedDepartment, Model.GetDepartments(),"--Select One--") %>
            <%= Html.ValidationMessageFor(x => x.SelectedDepartment)%>
        </div>

        <p>
            <input type="submit" value="Add Selected" />
        </p>
    </fieldset>

Я также делаю это, чтобы у модели были эти значения в случае сбоя проверки, чтобы получить необходимые данные для выпадающих меню:

p.ProblemId)%>

<% = Html.HiddenFor (p => p.ProblemName)%>

1 голос
/ 22 мая 2010

на стороне клиента:

  • Использование проверки Javascript

и / или

На стороне сервера:

  • Проверка в контроллере (с использованием FormCollection) - или
  • Создайте класс "CustomViewModel", который инкапсулирует всю проверку, строго введите ваше представление - или

Вы можете добавить два строковых свойства к вашему Model. Это позволит вам заполнить экземпляр вашей модели в Controller и соответствующим образом проверить в вашем Model / s ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...