2016-09-08 4 views
-2

Я получаю сообщение об ошибке проверки на моем DropDownList в моем действии Create, если я нажму кнопку отправки, не выбрав значение из DropDownList.Проверка DropDownList

Ошибка проверки, которую я получаю: Значение "" недействительно. Я хотел бы, чтобы сообщение об ошибке проверки сообщило Состояние не требуется!.

Я добавил необходимый атрибут проверки в свойство StId в ViewModel, но это не решило проблему.

Клиент Модель

public class Customer 
{ 
    public int CustId { get; set; } 
    public string CustFirstName { get; set; } 
    public string CustLastName { get; set; } 

    public int StId { get; set; } 
    public State State { get; set; } 
} 

Государственная модель

public class State 
{ 
    public int StId { get; set; } 
    public string StAbbr { get; set; } 

    public List<Customer> Customers { get; set; } 
} 

CustomerFormViewModel

public class CustomerFormViewModel 
{ 
    public int CustId { get; set; } 

    [Required(ErrorMessage = "First Name is required!")] 
    [Display(Name = "First Name")] 
    public string CustFirstName { get; set; } 

    [Required(ErrorMessage = "Last Name is required!")] 
    [Display(Name = "Last Name")] 
    public string CustLastName { get; set; } 

    [Required(ErrorMessage = "State is required!")] 
    [Display(Name = "State")] 
    public int StId { get; set; } 

    public IEnumerable<State> States { get; set; } 
} 

CustomerController

public class CustomerController : Controller 
{ 
    private OneClickAwayDbContext _context; 

    public CustomerController(OneClickAwayDbContext context) 
    { 
     _context = context; 
    } 

    public ActionResult Index() 
    { 
     return View(_context.Customers.ToList()); 
    } 

    public ActionResult Create() 
    { 
     var states = _context.States.ToList(); 
     var viewModel = new CustomerFormViewModel 
     { 
      States = states 
     }; 

     return View(viewModel); 
    } 

    [HttpPost] 
    [ValidateAntiForgeryToken] 
    public ActionResult Create(CustomerFormViewModel vm) 
    { 
     if (ModelState.IsValid) 
     { 
      var customer = new Customer(); 
      { 
       customer.CustFirstName = vm.CustFirstName; 
       customer.CustLastName = vm.CustLastName; 
       customer.StId = vm.StId; 
      } 

      _context.Customers.Add(customer); 
      _context.SaveChanges(); 
      return RedirectToAction("Index"); 
     } 

     else 
     { 
      var stateViewModel = new CustomerFormViewModel 
      { 
       States = _context.States.ToList() 
      }; 
      return View("Create", stateViewModel); 
     } 
    } 
} 

Create.chtml

@using (Html.BeginForm("Create", "Customer")) 
{ 
    <div class="form-group"> 
     @Html.LabelFor(c => c.CustFirstName) 
     @Html.TextBoxFor(c => c.CustFirstName, new { @class = "form-control" }) 
     @Html.ValidationMessageFor(c => c.CustFirstName) 
    </div> 

    <div class="form-group"> 
     @Html.LabelFor(c => c.CustLastName) 
     @Html.TextBoxFor(c => c.CustLastName, new { @class = "form-control" }) 
     @Html.ValidationMessageFor(c => c.CustLastName) 
    </div> 

    <div class="form-group"> 
     @Html.LabelFor(s => s.StId) 
     @Html.DropDownListFor(s => s.StId, new SelectList(Model.States, "StId", "StAbbr"), "", new { @class="form-control"}) 
     @Html.ValidationMessageFor(s => s.StId) 
    </div> 

    <div class="form-group"> 
     <button type="submit" class="btn btn-primary">Submit</button> 
    </div> 
} 
+0

Код, который вы показали, будет отображаться _State требуется! _ –

+0

@Stephen Muecke, Вы бы подумать так как я добавил '[Обязательный (ErrorMessage =" State is required! ")]', но он отображает только ** Значение "" недействительно ** – Brian

+0

Это будет (я только что протестировал его), поэтому его что-то не показало нас. И как примечание, в вашем блоке 'else' это должно быть просто' vm.States = _context.States.ToList(); return View (vm); '(нет необходимости инициализировать новую модель представления - просто верните ту, которую вы отправили –

ответ

0

Пожалуйста, включите jquery.validate.js и jquery.validate.unobtrusive.js в вашем cshtml файле

<script src="~/lib/jquery-validation/dist/jquery.validate.js"></scri‌​pt>  
<script src="~/lib/jquery-validation-unobtrusive/jquery.validate.uno‌​btrusive.js"></scrip‌​t> 
0

добавить эту строку в web.config

<appSettings> 
    <add key="ClientValidationEnabled" value="true" /> 
    <add key="UnobtrusiveJavaScriptEnabled" value="true" /> 
</appSettings> 

включают следующий файл Jquery на странице макета.

<script src="~/Scripts/jquery.validate.min.js"></script> 
<script src="~/Scripts/jquery.validate.unobtrusive.min.js"></script> 

Используя это ваше отправить событие нажатия кнопки не будет вашим [HttpPost] Принятие решения по вашему мнению, если какая-либо проверка требуется.

+0

спасибо, я добавил, что все еще есть проблемы. – Brian

+0

запустите проект и в браузере нажмите Ctrl + Shift + I (щелкните правой кнопкой мыши и откройте элемент проверки), а на вкладке source проверьте загруженный файл jquery. –

+0

В котором важно изменить web.config. Вы должны изменить файл корневой папки web.config, а не тот, который находится в папке «Вид» (только для этой папки). –

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