c# - ASP.NET MVC NerdDinner Tutorial question -
i'm following scott guthries mvc tutorial (http://nerddinnerbook.s3.amazonaws.com/part6.htm) , there's don't understand.
the controller class called dinnerscontroller has 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 page create.aspx shown displays form data 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 property called 'dinner' displaying relevant information dinner type objects done calling:
<label for="title">title:</label> <%= html.textbox("title", model.dinner.title) %>
i understand whats going on far. however, create.aspx contains submit type button:
<input type="submit" value="create" />
when button clicked, following method called:
[acceptverbs( httpverbs.post)] public actionresult create(dinner dinner)
what don't understand is, if form's model data 'dinnerviewformmodel' object, how mvc know 'dinner' object needs passed create method?
please enlighten me? thanks
afaik, mvc tries map properties available in post parameter provided. because of that, not need know type, creates object default constructor , maps form values created object - , method's parameter value.
btw: you'll notice view output not contain reference dinner
or dinnerformviewmodel
classes.
Comments
Post a Comment