c# - Asp.Net MVC EditorTemplate Model is lost after Post -
i have controller 2 simple methods:
usercontroller methods:
[acceptverbs(httpverbs.get)] public actionresult details(string id) { user user = userrepo.userbyid(id); return view(user); } [acceptverbs(httpverbs.post)] public actionresult details(user user) { return view(user); }
then there 1 simple view displaying details:
<% using (html.beginform("details", "user", formmethod.post)) {%> <fieldset> <legend>userinfo</legend> <%= html.editorfor(m => m.name, "labeltextboxvalidation")%> <%= html.editorfor(m => m.email, "labeltextboxvalidation")%> <%= html.editorfor(m => m.telephone, "labeltextboxvalidation")%> </fieldset> <input type="submit" id="btnchange" value="change" /> <% } %>
as can see, use editor template "labeltextboxvalidation":
<%@ control language="c#" inherits="system.web.mvc.viewusercontrol<string>" %> <%= html.label("") %> <%= html.textbox(model,model)%> <%= html.validationmessage("")%>
showing user information no problem. view renders user details. when submit form, object user lost. debugged on row "return view(user);" in post details method, user object filled nullable values. if dont use editor template, user object filled correct data. there has wrong editor template, can't figure out is. suggestions?
i re-architect little bit - change labeltextboxvalidation editor html helper, , make 1 editortemplate data model. way this:
<% using (html.beginform("details", "user", formmethod.post)) {%> <fieldset> <legend>userinfo</legend> <% html.editorfor(m => m); %> </fieldset> <input type="submit" id="btnchange" value="change" /> <% } %>
and editor template like:
<%= html.validatedtextboxfor(m => m.name); %> <%= html.validatedtextboxfor(m => m.email); %> <%= html.validatedtextboxfor(m => m.telephone); %>
where validatedtextboxfor new html helper. make that, easy:
public static mvchtmlstring validatedtextboxfor<t>(this htmlhelper helper, expression thingy) { // pseudo code, visual studio isn't in front of me right return helper.labelfor(thingy) + helper.textboxfor(thingy) + helper.validationmessagefor(thingy); }
that should set names of form fields right believe, seems source of problem.
edit: here code should out:
public static mvchtmlstring validatedtextboxfor<tmodel, tvalue>(this htmlhelper<tmodel> html, expression<func<tmodel, tvalue>> expression) { return mvchtmlstring.create( html.labelfor(expression).tostring() + html.textboxfor(expression).tostring() + html.validationmessagefor(expression).tostring() ); }
Comments
Post a Comment