2010-08-12 15 views
5

क्या यह एक बग या सुविधा है?मेरा एमवीसी व्यू मॉडेल सदस्य मेरे ActionResult पैरामीटर द्वारा ओवरराइड क्यों किया गया है?

संक्षिप्तता के लिए नीचे दिए गए सभी कोड को सरलता और आसान प्रतिकृति के लिए सरल बनाया गया है और वास्तव में व्यवहार को हाइलाइट करने के अलावा कुछ भी उपयोगी नहीं है।

मैं है एक वर्ग है कि एक पूर्णांक नामित आईडी में शामिल हैं: मेरी सूचकांक में

public ActionResult Edit(int id) 
{ 
    return View(new FooterLink() { ID = 5 }); //notice that I am explicitly setting the ID value here. 
} 

:

public class FooterLink 
{ 
    public int ID { get; set; } 
} 

मेरी नियंत्रक में, मैं एक ActionResult संपादित करें कि एक पैरामीटर 'id' कहलाती लेता है देखें मेरे पास संपादन आईडी का एक लिंक है जो 'आईडी' पैरामीटर निर्दिष्ट करता है:

<%= Html.ActionLink("Edit", "Edit", new { id = 1 })%> 

मेरे विचार में मेरे पास एसी है पाठ बॉक्स की ouple:

<%= Html.TextBox("ID", Model.ID)%> 
<%= Html.TextBox("Blah", Model.ID) %> 

जो HTML में निम्न प्रस्तुत करता है:

<input id="ID" name="ID" type="text" value="1"> 
<input id="Blah" name="Blah" type="text" value="5"> 

सूचना है कि "आईडी" का एक आईडी के साथ इनपुट अपने मूल्य मॉडल से नहीं मिल रहा है जैसे मैं इसे बता रहा हूँ करने के लिए ... लेकिन पैरामीटर से जो मेरे ActionResult को आपूर्ति की गई थी। यह व्यवहार Html.TextBoxFor, Html.Hidden, Html.HiddenFor, आदि के साथ समान है।

क्या देता है?

संपादित करें: मेरा मतलब यह बहुत समय पहले अपडेट करना था, लेकिन इसके आसपास कभी नहीं मिला। कारण यह हो रहा है क्योंकि मॉडलस्टेट में विधि में "आईडी" पैरामीटर के मान के साथ "आईडी" प्रविष्टि होगी और एमवीसी व्यूइंजिन मॉडल के बजाय एचटीएमएल हेल्पर्स भरते समय मॉडलस्टेट की जांच करता है। (Model.ID "आईडी",)

ModelState.Remove("id"); 

अब <% = Html.TextBox%>: आदेश में इस को हल करने के लिए, आप बस निम्न पंक्ति अपने नियंत्रक में सिर्फ वापसी से पहले जोड़ सकते हैं मॉडल से मूल्य प्राप्त होगा, मॉडल मॉडल नहीं। समस्या सुलझ गयी।

उत्तर

7

इस तरह एचटीएमएल सहायक काम करते हैं। वे पहले देखेंगे कि अनुरोध url में आईडी पैरामीटर है या मॉडल में दूसरे तर्क के रूप में निर्दिष्ट एक के बजाय उस मान का उपयोग करें।

+0

वास्तव में, ऐसा लगता है कि ऐसा लगता है। यह सिर्फ मेरे लिए गलत लगता है। यह सही व्यवहार है जब आप इसे केवल एक नाम देते हैं (यानी <% = एचटीएमएल। टेक्स्टबॉक्स ("आईडी")%>), लेकिन यदि मैं निर्दिष्ट करता हूं कि मान <% = Html.TextBox (" आईडी ", मॉडल.आईडी)%> या <% = एचटीएमएल। टेक्स्टबॉक्स फॉर (x => x.ID)%>, तब वह मूल्य है जहां से मुझे लगता है कि मूल्य आना चाहिए। यह विशेष रूप से परेशान है कि टेक्स्टबॉक्स फोर इस व्यवहार को प्रदर्शित करता है क्योंकि इसे पूरी तरह से मॉडल संचालित किया जाना चाहिए। –

+0

@ ब्रैडली, मैं आपसे सहमत हूं कि यह व्यवहार किसी से परिचित नहीं हो सकता है, लेकिन इससे पहले कि आप इसका इस्तेमाल कर लें, वहां कोई समस्या नहीं होनी चाहिए। –

+0

खेद है कि मुझे यह जवाब स्वीकार करने में बहुत लंबा लगा। एक वर्ष के लिए विचलित हो गया ... :) –

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