2010-04-29 17 views
5

के बाद खो दिया है मैं दो सरल तरीके के साथ एक नियंत्रक है:Asp.Net MVC EditorTemplate मॉडल पोस्ट

UserController तरीके:

[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); 
} 

तो फिर वहाँ विवरण प्रदर्शित करने के लिए एक साधारण दृश्य है:

<% 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" /> 
<% } %> 

आप देख सकते हैं, मैं एक संपादक टेम्पलेट "LabelTextBoxValidation" का उपयोग करें:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<string>" %> 
<%= Html.Label("") %> 
<%= Html.TextBox(Model,Model)%> 
<%= Html.ValidationMessage("")%> 

उपयोगकर्ता जानकारी दिखा रहा है कोई समस्या नहीं है। दृश्य पूरी तरह से उपयोगकर्ता विवरण प्रस्तुत करता है। जब मैं फॉर्म जमा करता हूं, ऑब्जेक्ट उपयोगकर्ता खो जाता है। मैं पंक्ति पर डीबग किया "वापसी देखें (उपयोगकर्ता);" पोस्ट विवरण विधि में, उपयोगकर्ता ऑब्जेक्ट शून्य मूल्यों से भरा है। अगर मैं संपादक टेम्पलेट का उपयोग नहीं करता हूं, तो उपयोगकर्ता ऑब्जेक्ट सही डेटा से भरा हुआ है। तो संपादक टेम्पलेट के साथ कुछ गड़बड़ होनी चाहिए, लेकिन यह पता नहीं लगा सकता कि यह क्या है। सुझाव?

+0

Firebug या फ़िडलर का उपयोग कर दोनों ही मामलों में सबमिट किए गए फ़ॉर्म की तुलना करें: यहाँ कोड है कि आप बाहर की मदद करनी चाहिए है। यह अलग होगा। उसे फिक्स करें। –

उत्तर

1

मैं थोड़ी देर फिर से आर्किटेक्ट करूँगा - अपने लेबलटेक्स्टबॉक्स वैलिडेशन एडिटर को एचटीएमएल हेल्पर में बदलें, और फिर अपने डेटा मॉडल के लिए एक संपादक टेम्पलेट बनाएं। इस तरह आप कुछ इस तरह कर सकता है:

<% using (Html.BeginForm("Details", "User", FormMethod.Post)) 
{%> 
    <fieldset> 
    <legend>Userinfo</legend> 
    <% Html.EditorFor(m => m); %> 
    </fieldset> 
    <input type="submit" id="btnChange" value="Change" /> 
<% } %> 

और अपने संपादक टेम्पलेट होगा कुछ की तरह:

<%= Html.ValidatedTextBoxFor(m => m.Name); %> 
<%= Html.ValidatedTextBoxFor(m => m.Email); %> 
<%= Html.ValidatedTextBoxFor(m => m.Telephone); %> 

जहां ValidatedTextBoxFor अपने नए एचटीएमएल सहायक है। कि बनाने के लिए, यह काफी आसान होगा:

public static MvcHtmlString ValidatedTextBoxFor<T>(this HtmlHelper helper, Expression thingy) 
{ 
    // Some pseudo code, Visual Studio isn't in front of me right now 
    return helper.LabelFor(thingy) + helper.TextBoxFor(thingy) + helper.ValidationMessageFor(thingy); 
} 

कि प्रपत्र फ़ील्ड्स के नाम निर्धारित करना चाहिए सही मेरा मानना ​​है कि, के रूप में है कि समस्या के स्रोत की तरह लगता है।

संपादित:

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() 
      ); 
} 
+0

लाइन Html.EditorFor (m => m) मॉडल के सभी सदस्यों को प्रस्तुत करता है, जो मैं नहीं चाहता हूं। मैं सिर्फ उपयोगकर्ता वर्ग के तीन सदस्यों को प्रस्तुत करना चाहता हूं। लेकिन नया एचटीएमएल सहायक अच्छा दिखता है, धन्यवाद! :) – Colin

+0

यदि आप अपने स्वयं के संपादक टेम्पलेट को \ Views \ \ Editor टेम्पलेट्स \ – Tejs

+0

Tejs में परिभाषित नहीं करते हैं, तो इसे बनाने के लिए, यह काफी आसान होगा: क्या आप इस तरह के HtmlHelper को बनाने के तरीके के बारे में अधिक स्पष्ट हो सकते हैं? मैं ऐसी संरचना के साथ एक बनाने की कोशिश कर रहा हूं, लेकिन मैं ऐसा करने में असफल रहा। – Colin

संबंधित मुद्दे