Интересно, почему ContactModel в ContactController не заполнен значениями, указанными в форме. Где моя голова взорвалась?Модель пуста после отправки
код как:
HomeController (где контактная форма)
public class HomeController : Controller
{
public ActionResult Index()
{
var viewModel = new HomeViewModel();
return View(viewModel);
}
}
ViewModel для дома
public class HomeViewModel
{
public ContactModel ContactModel { get; set; }
}
ContactModel для хранения значений
public class ContactModel
{
[Required(ErrorMessage = "Required")]
public String Name { get; set; }
[EmailAddress]
[Required(ErrorMessage = "Required")]
public String Email { get; set; }
[Required(ErrorMessage = "Required")]
public String Message { get; set; }
}
Index View для HomeController
@model MyNameSpace.ViewModels.HomeViewModel
@using (Html.BeginForm("Send", "Contact", FormMethod.Post))
{
<div class="form-group">
@Html.LabelFor(model => model.ContactModel.Name, "Name", new { @class = "sr-only" })
@Html.TextBoxFor(model => model.ContactModel.Name, new { @class = "form-control", @placeholder = "Name" })
</div>
<div class="form-group">
@Html.LabelFor(model => model.ContactModel.Email, "E-mail", new { @class = "sr-only" })
@Html.TextBoxFor(model => model.ContactModel.Email, new { @class = "form-control", @placeholder = "E-mail" })
</div>
<div class="form-group">
@Html.LabelFor(model => model.ContactModel.Email, "Message", new { @class = "sr-only" })
@Html.TextAreaFor(model => model.ContactModel.Message, new { @class = "form-control", @placeholder = "Message" })
</div>
<p><button type="submit" class="btn btn-default">Send</button></p>
}
ContactController Отправить
public class ContactController : Controller
{
[HttpPost]
public ActionResult Send(ContactModel model)
{
if (ModelState.IsValid)
{
// ModelState is not valid - but why!?
return RedirectToAction("Index", "Success");
}
return RedirectToAction("Index", "Error");
}
}
По какой-то причине на моей форме представить, модели, представленной в ContactController.Send(ContactModel model)
имеет все нулевые значения - где ссылка сломана?
Так что лучший дизайн, если я хочу использовать (модель ContactModel) ContactController.Send из нескольких мест, я бы переместить его в какой-то помощник класс или что такое хороший дизайн? – janhartmann
В этом случае я не вижу большой пользы от этого класса HomeViewModel, который вы использовали в представлении. Все, что он делает, - это перенос вашей модели домена в свойство, которое не должно работать на моделях представления. –