मुझे एक ऐसे फॉर्म में फसल हो रही है जिसे मैं पोस्ट करने का प्रयास कर रहा हूं। परिदृश्य में जहां फॉर्म मान्य नहीं है, मैं ModelState.AddModelError()
पर कॉल करने का मानक मार्ग ले रहा हूं और फिर परिणाम देखें।एएसपी.नेट एमवीसी मॉडलस्टेट/एचटीएमएल। टेक्स्टबॉक्स पोस्टबैक समस्या
बात यह है कि एचटीएमएल। * हेल्पर्स को प्रतिपादन करते समय पोस्ट मूल्य चुनना होता है और मैं देख रहा हूं कि मेरे टेक्स्ट फ़ील्ड्स केवल ऐसा करते हैं यदि मैं उन्हें पोस्टबैक एक्शन की पैरामीटर सूची में शामिल करता हूं, जो देखने की आवश्यकता नहीं है क्योंकि कुछ रूपों में पैरामीटर के रूप में सभी को सूचीबद्ध करना चाहते हैं।
मेरे कार्रवाई कोड मोटे तौर पर है:
Minimum: <%= Html.TextBox("MinVolume", null, new { size = 5 })%>
:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult EditDataDefinition(long? id, string name)
{
var dataDefinition = ...
// do some validation stuff
if (!ModelState.IsValid)
{
// manually set checkbox fields via ViewData seeing as this STILL doesn't work in MC 1.0 :P
// ...
return View(dataDefinition);
}
}
अब, dataDefinition (जो एसक्यूएल संस्था के लिए एक LINQ है) एक क्षेत्र MinVolume है, इस लाइन द्वारा ध्यान में रखते हुए नियंत्रित किया जाता है
फिर भी जब एक असफल मॉडलस्टेट सत्यापन के बाद दृश्य प्रस्तुत किया जाता है, तो हमारे द्वारा पोस्ट किए गए मूल पृष्ठ पर टाइप किए गए मान को सुरक्षित नहीं किया जाता है, मैं इसे पोस्टबैक विधि में पैरामीटर के रूप में शामिल करता हूं। सचमुच, मैं "समस्या का समाधान" कर सकते हैं ऐसा करने से:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult EditDataDefinition(long? id, string name, string minVolume)
किसी कारण है कि क्षेत्र मूल्य संरक्षित किया जा करने के लिए मजबूर होगा। यह मेरे लिए बेवकूफ लगता है क्योंकि मेरे फॉर्म के मुकाबले ज्यादा मूल्य हैं और मुझे उस क्षेत्र के लिए पैरामीटर जोड़ने की ज़रूरत नहीं है।
कोई विचार?
नहीं, निर्दिष्ट नल निर्दिष्ट करना है कि मौजूदा मॉडल संदर्भ को मूल्य पूछने के लिए उपयोग किया जाना चाहिए। मिनवॉल्यूम निर्दिष्ट करना स्पष्ट है और उस मूल्य को पहले सबमिट किए गए स्थान के बजाय उपयोग करने के लिए मजबूर करेगा। –
गलत। मिनीवॉल्यूम निर्दिष्ट करना बाद के पोस्ट के लिए ViewDataDoctionary और फिर ModelStateDictionary को देखता है। तो यदि मॉडल .MinVolume 5 becore संपादन कहता है, तो निर्दिष्ट करें MinVolume टेक्स्टबॉक्स में 5 रखेगा। फिर यदि कोई पोस्ट किया गया है (मान 3 कहें) लेकिन अमान्य पाया गया तो टेक्स्टबॉक्स 3 बार बार दिखाएगा। या तुमने कोशिश की? आप आम तौर पर 'नया' या 'बनाएं' दृश्य पर शून्य निर्दिष्ट करते हैं ताकि प्रारंभिक पोस्ट फ़ील्ड में खाली दिखाई दे, और बाद की पोस्ट दर्ज किए गए मान को जारी रखे। –
यह वही तरीका है जो मैं इसे करता हूं और हर बार काम करता है। मैंने कभी भी कहीं नहीं देखा है जिसे आपको शून्य निर्दिष्ट करना है। एक लिंक जहां आपने देखा वह अच्छा होगा। – sirrocco