Я получаю сообщение об ошибке проверки на моем 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>
}
Код, который вы показали, будет отображаться _State требуется! _ –
@Stephen Muecke, Вы бы подумать так как я добавил '[Обязательный (ErrorMessage =" State is required! ")]', но он отображает только ** Значение "" недействительно ** – Brian
Это будет (я только что протестировал его), поэтому его что-то не показало нас. И как примечание, в вашем блоке 'else' это должно быть просто' vm.States = _context.States.ToList(); return View (vm); '(нет необходимости инициализировать новую модель представления - просто верните ту, которую вы отправили –