I have a model with some validations below
public class RequestABook
{
[Required(ErrorMessage = "Name Required")]
[DisplayName("Book Name")]
public string BookName { get; set; }
[Required(ErrorMessage = "Zipcode Required")]
[DisplayName("Zipcode")]
public string ZipCode { get; set; }
[Required(ErrorMessage = "Contact Name Required")]
[DisplayName("Contact Name")]
public string ContactName { get; set; }
[Required(ErrorMessage = "Email Id Required")]
[DataType(DataType.EmailAddress)]
public string Email { get; set; }
[Required(ErrorMessage = "Book Description Required")]
public string BookDescription { get; set; }
[Required(ErrorMessage = "You need to check one answer")]
public string Answer { get; set; }
}
I have a view model here
public class RequestViewModel
{
public RequestABook MyTestViewModel { get; set; }
}
I have my main page here that loads
@model BookRequestValidation.Models.RequestViewModel
@{
ViewBag.Title = "RequestABook";
}
<h2>RequestABook</h2>
@using (Html.BeginForm())
{
@Html.ValidationSummary(true)
<fieldset>
<legend>Request Book</legend>
<div class="editor-label">
@Html.LabelFor(m => m.MyTestViewModel.BookName)
</div>
<div class="editor-field">
@Html.EditorFor(m => m.MyTestViewModel.BookName)
@Html.ValidationMessageFor(m => m.MyTestViewModel.BookName)
</div>
<div class="editor-label">
@Html.LabelFor(m => m.MyTestViewModel.ZipCode)
</div>
<div class="editor-field">
@Html.EditorFor(m => m.MyTestViewModel.ZipCode)
@Html.ValidationMessageFor(m => m.MyTestViewModel.ZipCode)
</div>
<div class="editor-label">
@Html.LabelFor(m => m.MyTestViewModel.ContactName)
</div>
<div class="editor-field">
@Html.EditorFor(m => m.MyTestViewModel.ContactName)
@Html.ValidationMessageFor(m => m.MyTestViewModel.ContactName)
</div>
<div class="editor-label">
@Html.LabelFor(m => m.MyTestViewModel.Email)
</div>
<div class="editor-field">
@Html.EditorFor(m => m.MyTestViewModel.Email)
@Html.ValidationMessageFor(m => m.MyTestViewModel.Email)
</div>
<div class="editor-label">
@Html.LabelFor(m => m.MyTestViewModel.BookDescription)
</div>
<div class="editor-field">
@Html.EditorFor(m => m.MyTestViewModel.BookDescription)
@Html.ValidationMessageFor(m => m.MyTestViewModel.BookDescription)
</div>
<div id="HCBudget" class="validation">
<label for="budgethealth">Budget Health</label>
@Html.RadioButton("Answer", "Red")
@Html.RadioButton("Answer", "Yellow")
@Html.RadioButton("Answer", "Green")
@Html.ValidationMessageFor(m => m.MyTestViewModel.Answer)
</div>
<input type="submit" value="Request Book" />
</fieldset>
}
Question: How do you guys handle validation with models used in a viewmodel. Before I used this in a viewmodel everything was working well. By the time I used a viewmodel validation stopped working.
Here is what the post action looks like.
public ActionResult RequestABook()
{
return View();
}
[HttpPost]
public ActionResult RequestABook(RequestABook quote)
{
return View();
}