मेरे पास ऐसा मॉडल है:एएसपीएनईटी एमवीसी - मॉडलस्टेट क्यों है। यह वैध फ़ील्ड "एक्स फ़ील्ड आवश्यक है" जब उस फ़ील्ड का मान हो?
public PurchaseOrder
{
[Required] [StringLength(15)]
public virtual string OrderNumber {get;set;}
// etc.
}
जब मैं दृश्य से ऑर्डर सबमिट करता हूं ($ .post का उपयोग करके, इनपुट प्रकार = सबमिट नहीं करता) यह मेरे नियंत्रक वर्ग पर जाता है:
public class PurchaseOrderController
{
public JsonResult Save(PurchaseOrder order)
{
// TryUpdateModel(order); // commented out since modelstate.isvalid remains false anyway
if (ModelState.IsValid)
{
// its never valid
}
}
}
मॉडलस्टेट IValid हमेशा त्रुटि के साथ झूठी वापसी करता है: "ऑर्डर नंबर फ़ील्ड आवश्यक है।" लेकिन इस क्षेत्र में एक मूल्य है (?? क्यों)
यह कहता है कि "मूल्य आवश्यक है" जब उसके पास कोई मूल्य हो? क्या मुझे कुछ याद आया है? क्या सबमिट के बजाए $ .post की वजह से है? मैं क्या कर सकता हूँ?
डीबगर इस तरह दिखता है:
alt text http://www.freeimagehosting.net/uploads/f734f3d95d.png
संपादित करें: अतिरिक्त जानकारी ....
मुझे सच में लगता है कि किसी कारण से मॉडल बाध्यकारी नहीं हो रहा है। जब मैं यहां प्राप्त इस कोड को आजमाता हूं:)
if (!ModelState.IsValid)
{
ModelState.Clear();
ModelMetadata modelMetadata = ModelMetadataProviders.Current.GetMetadataForType(() => order, order.GetType());
ModelValidator compositeValidator = ModelValidator.GetModelValidator(modelMetadata, base.ControllerContext);
foreach (ModelValidationResult result in compositeValidator.Validate(null))
{
this.ModelState.AddModelError(result.MemberName, result.Message);
}
}
फिर ModelState.IsValid = true। compositeValidator.Validate() 0 त्रुटियां देता है। मुझे लगता है कि यह इंगित करता है कि मॉडल बाध्य नहीं था, लेकिन मुझे अभी भी पता नहीं क्यों।
नियंत्रक विधि वास्तव में इस तरह दिखती है (मूल रूप से इस प्रश्न को लिखते समय फ़िल्टर को छोड़ दिया गया)
[JsonFilter(Param = "order", JsonDataType = typeof(PurchaseOrder))]
public JsonResult Save(PurchaseOrder order) { // etc ... }
और जेसनफ़िल्टर जेसन सबमिट किए गए डेटा से पीओसीओ निकालने के लिए करता है:
filterContext.ActionParameters[Param]
= jsSerializer.Deserialize(inputContent, JsonDataType);
मैंने इस लाइन पर ब्रेकपॉइंट लगाया है, और ऑर्डर मान्य है, प्लस ऑर्डर। ऑर्डर नम्बर का सही मान है।
तो अभी भी अनसुलझा है, लेकिन उम्मीद है कि यह अतिरिक्त जानकारी समाधान खोजने में मदद करेगी
संपत्ति वर्चुअल क्यों चिह्नित है? क्या आप पीओसीओ परिवर्तन ट्रैकिंग का उपयोग कर रहे हैं? –
मूल्य क्या है? आप '$ .post' का उपयोग कैसे कर रहे हैं? क्या यह सामान्य जमा के साथ काम करता है? –
मुझे नहीं पता कि यह वर्चुअल क्यों है, ऐसा तब हुआ जब मैंने मौजूदा ऐप पर काम करना शुरू किया। –