0

Я использую проверку модели в MVC для проверки моих форм.ASP MVC Validation dropdownbox

Я делаю это так:

[MetadataType(typeof(CarModel))] 
public partial class Car {...} 


public class CarModel 
{ 
    [Required(ErrorMessage = "Select the brand please")] 
    [Display(Name = "Brand* :")] 
    public object brand_id { get; set; } 

    ... 
} 

На моем взгляде, у меня есть этот код для выпадающего DropDownBoxого:

@Html.DropDownListFor(m => m.brand_id, new SelectList(ViewBag.brands, "id", "name"), new {@class = "selectBoxes" }) 

И Viewbag.brands заполняется так:

List<Brand> brands = Brand.GetAllBrands(); 
ViewBag.brands = brands; 

(Бренды имеют поля «id» (int) «name» (строка)), класс/таблица Car использует «brand_id» в качестве ссылки.

Когда я хочу отправить пустую форму, обычно Formvalidation должен работать, но я получаю сообщение об ошибке на @ Html.DropDownListFor:

ArgumentNullException was unhandled by user code 
Value cannot be null. 

В чем проблема? Создание выпадающего списка? Или не работает правильная работа? Брендовые имена загружаются правильно в раскрывающемся списке, и нет значения «0», например (- Выбрать -), первый бренд отображается в раскрывающемся списке ... Но когда я отправляю пустую форму, она застревает выпадающий список ...

EDIT: Может быть, проблема в том, что Car использует «brand_id», а Brand использует «id»? Если да, то как решить это без изменения этих имен полей?

EDIT2: Бренд просто частичный класс торговых марок (Linq), с функцией:

public static List<Brand> GetAllBrands() 
{ 
    db = new CarsDataClassesDataContext(); 
    return db.Brands.OrderBy(b => b.name).ToList<Brand>(); 
} 
+0

Пожалуйста, внесите определение класса 'Brand'. –

+0

Когда выпадающее меню было создано, ViewBag.brands имеет значение NULL. Вы уверены, что ваш код инициализации (ViewBag.brands = бренды) был выполнен? Используйте контрольную точку, чтобы быть уверенным. Можете ли вы разместить свой контроллер? – Ronald

+0

ViewBag.brands заполнен, потому что выпадающий список показан правильно с фирменными именами в нем, но когда я отправляю форму, я получаю ошибку ... Или я вас не понимаю? – francisMi

ответ

1

Исходя из метода POST, если ModelState недействителен он вернется в ту же точку зрения, и в этом случае вам придется повторно инициализировать ViewBag.brands снова и снова.

if (ModelState.IsValid) 
{ 
    // perform your logic here 
} 

// if you reached this code, that means the model validation failed 
// so you will have to reinitialize the ViewBag 

ViewBag.brands = Brand.GetAllBrands(); 
return View(car);