Hi,
I'm following Scott Guthries MVC tutorial (http://nerddinnerbook.s3.amazonaws.com/Part6.htm) and there's something I don't understand.
The Controller class called DinnersController has the following Create methods:
public ActionResult Create()
{
Dinner dinner = new Dinner()
{
EventDate = DateTime.Now.AddDays(7)
};
return View(new DinnerFormViewModel(dinner));
}
[AcceptVerbs( HttpVerbs.Post)]
public ActionResult Create(Dinner dinner)
{
if (ModelState.IsValid)
{
try
{
dinner.HostedBy = "SomeUser";
dinnerRepository.Add(dinner);
dinnerRepository.Save();
return RedirectToAction("Details", new { id = dinner.DinnerID });
}
catch
{
foreach (var violation in dinner.GetRuleViolations())
ModelState.AddModelError(violation.PropertyName, violation.ErrorMessage);
}
}
return View(new DinnerFormViewModel(dinner));
}
The first method causes the page Create.aspx to be shown which displays form data for the object type 'DinnerViewFormModel' i.e.
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<NerdDinner.Controllers.DinnerFormViewModel>" %>
The class 'DinnerViewFormModel' contains a property called 'Dinner' so displaying the relevant information for Dinner type objects is done by calling:
<label for="Title">Title:</label>
<%= Html.TextBox("Title", Model.Dinner.Title) %>
I understand whats going on so far. However, Create.aspx contains a submit type button:
<input type="submit" value="Create" />
When the button is clicked, the following method is called:
[AcceptVerbs( HttpVerbs.Post)]
public ActionResult Create(Dinner dinner)
What I don't understand is, If the form's Model data is a 'DinnerViewFormModel' object, how does MVC know what 'Dinner' object needs to be passed to the Create method?
Please could someone enlighten me? Thanks