MVC и XVal с выпадающими списками - значение «Пожалуйста, выберите» недопустимо - PullRequest
1 голос
/ 28 апреля 2009

Я следую подходу, обозначенному здесь , чтобы сделать это.

У меня проблема с проверкой выпадающего выбора с помощью xval, привязка MVC, по-видимому, делает неверную вещь, позволяя операции пройти проверку, но состояние модели сохраняет исключение привязки и делает страницу недействительной - поэтому я получаю ситуацию где разрешено выполнение операции с недопустимыми данными, но страница недействительна, поэтому пользователь полагает, что проверка не удалась.

Это может прояснить ситуацию

Это мой выпадающий список, предположим, что пользователь ничего не сделал, поэтому выбрано "Пожалуйста, выберите".

  Do you like cheese:
     <select name="Favourites.Cheese">
         <option>Please Select</option>
        <option value="1">Yes</option>
        <option value="0">No</option>
     </select>
     <%=Html.ValidationMessage("Favourites.Cheese")%>

Это действие Controller для сообщений из тоже, MVC отображает значение false в fav.cheese,

public ActionResult Create(Favourites fav)
{
            try
            {
                _favTask.Create(fav);
            }
            catch (RulesException ex)
            {
                ex.AddModelStateErrors(ModelState, "Favourites");
            }

            if(!ModelState.IsValid)
            {
                //redirect back
            }
            //other stuff
 }

Свойство было приписано

 pulic class Favourites
    {
         [Required]
          public bool Cheese{get;set;}
    }

Нет исключений, потому что fav.cheese имеет значение

public int Create(Favourites fav)
{

   var errors = DataAnnotationsValidationRunner.GetErrors(fav);
   if (errors.Any())
       throw new RulesException(errors);

       //create fav   
 }

Но когда фокус возвращается к контроллеру, ModelState.Isvalid выдается как ложное, поэтому значение from перезагружается с сообщением Значение «Пожалуйста, выберите» недопустимо. Как мне это предотвратить, как я могу использовать метод проверки xVal «Пожалуйста, выберите значение»?

Ответы [ 2 ]

1 голос
/ 30 апреля 2009

Boolean - это тип значения, поэтому он всегда будет иметь значение. Поэтому [обязательно] не имеет реального эффекта. Что произойдет, если вы вместо этого будете использовать Nullable ? Это должно позволить MVC присваивать нулевое значение, если выбран первый параметр, а атрибут Required может утверждать, что пользователь действительно выбрал значение.

1 голос
/ 28 апреля 2009

Если вы хотите, чтобы пользователь мог не выбирать значение и выводить false, тогда я бы дал вашему выбору по умолчанию значение 0. Таким образом, будет отправлено значение, даже если он не выберет одно и Обязательный атрибут будет удовлетворен.

<option value="0">Please Select</option>

РЕДАКТИРОВАТЬ : На основании ваших комментариев я предлагаю некоторую проверку на стороне клиента с использованием плагина проверки на стороне клиента - например, jQuery validation . Это позволит вам в большинстве случаев выдавать подходящее сообщение об ошибке без необходимости фактически публиковать запрос. На стороне сервера, если ModelState недопустим и это конкретное поле недопустимо, замените сообщение об ошибке более подходящим. Я бы не предложил менять модель только для того, чтобы приспособить рамки привязки.

...