Сопоставить более 1 поля формы с модельным свойством - PullRequest
1 голос
/ 31 мая 2011

У меня есть форма, где я хочу, чтобы пользователь указал свой номер телефона. Однако форма выглядит так:

  [FormField-1] - [FormField-2] - [FormField-3]

Там, где есть три текстовых поля, чтобы облегчить пользователю ввод его в формате xxx-xxx-xxxx. Тем не менее, мой класс модели:

class Person
{
  [Required(ErrorMessage="Phone Mandatory!")]
  public string phone {get; set;}
}

Мой взгляд выглядит так:

@model MvcApplication1.Models.Person

@using ( Html.BeginForm("Create", "Home"))
{
  @Html.TextBoxFor( model => model.phone )
  @Html.ValidationMessageFor( model => model.phone )<br />
  <input type="submit" value="submit" />
}

Как мне обойти это, чтобы у меня не было трех разных свойств класса для соответствия 3 различным полям формы, которые представляют номер телефона?

Спасибо!

Ответы [ 4 ]

2 голосов
/ 31 мая 2011

Более простым решением может быть использование некоторого javascript в форме, чтобы сохранить три отдельных значения в один скрытый вход и связать этот единственный вход с моделью.

2 голосов
/ 31 мая 2011

Для этого можно использовать настраиваемый механизм связывания моделей.

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

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

Посмотрите на этонемного больше информации о работе с пользовательской привязкой модели: Пользовательская привязка модели

Редактировать: Вы также можете просто принять тип FormCollection в своем действии, чтобы прочитать необработанные опубликованные данные и обработать их.там, если вы не хотите проходить весь отрезок с привязкой пользовательской модели, но это зависит от того, как вы хотите расширить свою модель в будущем, я думаю.

1 голос
/ 31 мая 2011

Я бы пошел с пользовательской ViewModel в этой ситуации.

0 голосов
/ 31 мая 2011

Другое решение также может заключаться в создании значения телефонного номера в методе Action с помощью чего-то вроде:

[HttpPost]                                                        
public ActionResult FormSubmit(Person person)
{
     person.phone =  Request.Form["FormField-1"] +  Request.Form["FormField-2"] + Request.Form["FormField-3"];
    ...

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