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

Popular posts from this blog

javascript - Enclosure Memory Copies -

php - Replacing tags in braces, even nested tags, with regex -