यह काम कर रहा है, लेकिन कैसे ???एएसपीनेट एमवीसी पोस्टबैक पर मेरे गलत मूल्यों को कैसे याद करता है?
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Edit(Person person)
{
bool isvalid = ModelState.IsValid;
etc.
व्यक्ति वस्तु एक संपत्ति जन्मतिथि, प्रकार दिनांक समय है:
मैं एक पद के लिए एक नियंत्रक कार्रवाई की है। जब मैं फॉर्म में कुछ अमान्य डेटा डालता हूं, तो 'ब्लब्ला' कहें जो स्पष्ट डेटाटाइम नहीं है, यह सही डेटा के साथ सभी (अन्य) व्यक्ति गुणों को भरता है और जन्मदिन की संपत्ति को एक नए खाली दिनांक समय के साथ भरता है। बूल isvalid मूल्य 'झूठा' है। अब तक इतना अच्छा है।
तो मैं यह नहीं:
return View(p);
और ध्यान में रखते हुए मैं इस है:
<%= Html.TextBox("BirthDate", String.Format("{0:g}", Model.BirthDate)) %>
<%= Html.ValidationMessage("BirthDate", "*") %>
चींटी वहाँ यह आता है: मैं मॉडल उम्मीद नया, रिक्त दिनांक समय को रोकने के लिए क्योंकि मैं नहीं था कोई नया डेटा नहीं डालता है। दूसरा, जब व्यू कुछ प्रदर्शित करता है, तो यह डेटटाइम होना चाहिए, क्योंकि Model.BirthDate
डेटटाइम के अलावा कुछ भी नहीं रख सकता है। लेकिन मेरे आश्चर्य के लिए, यह 'blabla' मान के साथ एक टेक्स्टबॉक्स दिखाता है! (और इसके पीछे लाल *)
कौन सा अच्छा है क्योंकि उपयोगकर्ता देख सकता है कि उसने क्या गलत लिखा है, लेकिन डेटटाइम फ़ील्ड में उस (blabla) स्ट्रिंग को दृश्य में कैसे स्थानांतरित किया जा सकता है?
संपादित करें: मॉडलस्टेट जानकारी ने मुझे यहां बहुत मदद की। मैं यह भी नोट करता हूं कि एमवीसी 2 में, जब आप एचटीएमएल के लिए अपना टेम्पलेट बनाते हैं। एडिटरफ़ोर() आपको इस व्यवहार को स्वयं लागू करना होगा। मैं एक
DateTime.ascx
/विचारों/साझा/EditorTemplates फ़ोल्डर में
बनाया है, और वहाँ में मैं जाँच करने के लिए किया था अगर वहाँ इस संपत्ति मूल्य के लिए एक modelstate त्रुटि थी, और यदि हां, की जगह में अमान्य डेटा दिखाने मॉडल डेटा।
तो ध्यान में रखते हुए मैं इस का उपयोग करें:
<%
bool invalidData = false;
string propertyName = ViewData.ModelMetadata.PropertyName;
ModelState ms = ViewData.ModelState[propertyName];
if (ms != null)
{
invalidData = ms.Errors.Count > 0;
}
string valueToshow = invalidData ? ViewData.ModelState[propertyName].Value.AttemptedValue : String.Format("{0:g}", Model);
%>
<input class="text-box single-line" id="<%= propertyName %>" name="<%= propertyName %>" type="text" value="<%= valueToshow %>" />
धन्यवाद, अब सहायक ने मॉडल में मूल्य को पार्स करने के बाद और अधिक नहीं किया। – Michel