2009-12-14 5 views
2

У меня есть модель представления с 2 свойствами, которые являются необязательными - т.е. - не требуется. В представлении используется dropdownlistfor(), чтобы получить значения для этих двух полей, а включает в себя опциональную метку «» для пустого значения.MVC2 Validation - «Требуется значение»

Когда отправлено обратно в действие create, у ModelState есть ошибка для обоих этих полей, в которой указано «Требуется значение».

У кого-нибудь есть подсказка, если это ошибка или ошибка глупого пользователя (т. Е. Меня)?

Благодаря

Udpate:

The View Модель выглядит следующим образом: [DisplayName ("Check Digit Типа")] общественный VMBarcodeMaskCheckDigitType BarcodeMaskCheckDigitType { прибудет; комплект; }

[DisplayName("Mask Type")] 
    [Required(ErrorMessage="Mask type is required")] 
    public VMBarcodeMaskType BarcodeMaskType 
    { 
     get; 
     set; 
    } 

    [DisplayName("Product")] 
    public VMProduct Product 
    { 
     get; 
     set; 
    } 

Связывание в контроллере:

public ActionResult Create() 
     { 
      BarcodeMaskViewModel model = new BarcodeMaskViewModel(new VMBarcodeMask(), Domain.GetBarcodeMaskTypes(), Domain.GetBarcodeCheckDigitTypes(), Domain.GetProducts()); 
      return View(model); 
     } 

     // 
     // POST: /Barcode/Create 

     [HttpPost] 
     public ActionResult Create(BarcodeMaskViewModel model) 
     { 
      try 
      { 
       if (ModelState.IsValid) 
       { 

... 
       } 

      } 
      catch (Exception ex) 
      { 
       ModelState.AddModelError("*", ex); 
      } 
      return View(new BarcodeMaskViewModel(model.BarcodeMask, Domain.GetBarcodeMaskTypes(), Domain.GetBarcodeCheckDigitTypes(), Domain.GetProducts())); 
     } 
+0

Какую технику проверки вы используете? Я предполагаю, что атрибуты валидации DataAnnotation? Можете ли вы опубликовать эту модель представления и код, который выполняет привязку? – Charlino

+0

Вот что представляет собой часть модели для просмотра: [DisplayName ("Check Digit Type")] public VMBarcodeMaskCheckDigitType BarcodeMaskCheckDigitType { get; комплект; } [отображаемое_имя ("Маска типа")] [Требуемый (ErrorMessage = "Тип маски требуется")] общественного VMBarcodeMaskType BarcodeMaskType { Get; комплект; } [DisplayName («Продукт»)] общественный VMProduct Продукт { get; комплект; } – Jonesie

ответ

0

У меня была эта проблема тоже, и я обнаружил, что это не было на самом деле ничего общего с необязательными полями. Это потому, что у меня был автогенерирующий столбец первичного ключа для объекта, называемый «Id». MVC2 автоматически проверял значение для этого, и, очевидно, не было никого, поскольку он был автоматически сгенерирован.

Есть простой способ исправить это, чтобы переименовать столбец в BarcodeId и т. Д., А не только Id. Я дал лучшее объяснение здесь: http://www.ediblecode.com/post/A-value-is-required-with-ASPNET-MVC-2.aspx

Это объяснение все в предположении, что вы используете LINQ ...

+0

Ой, это противно. В моем случае я использую LightSpeed ​​для datalayer (что потрясающе кстати), и он настаивает на Id. У объектов модели My View также есть Id, и я использую automapper для перемещения между ними. Я переименую Id в модели представления и измените отображение, чтобы обработать это. Cheers – Jonesie

+0

К сожалению, это не сработало :( – Jonesie

0

Просто используйте Bind (Exclude = «Id») перед первым параметром вашего Create действия.

+0

К сожалению, это не сработает.У меня нет проблемы с Id, но с ProductId и BarcodeMaskTypeId. Я попробовал исключить их, но это не сработало. Мое текущее обходное решение - игнорировать любые ошибки модели из этих двух полей. – Jonesie

Смежные вопросы