यह previous question का अनुवर्ती है जो कि मैंने क्लाइंट को एक त्रुटि वापस करने के बारे में पहले बताया था, लेकिन मॉडलस्टेट से संबंधित है।एएसपी.NET एमवीसी में, मॉडलस्टेट को AJAX अद्यतन के साथ उपयोग किया जा सकता है?
क्या किसी ने भी नेरड डिनर दृष्टिकोण का उपयोग किया है, लेकिन अजाक्स के साथ? तो बेवकूफ रात्रिभोज एक अद्यतन करता है।
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Edit(int id, FormCollection formValues)
{
Dinner dinner = dinnerRepository.GetDinner(id);
try
{
UpdateModel(dinner);
dinnerRepository.Save();
return RedirectToAction("Details", new { id=dinner.DinnerID });
}
catch
{
foreach (var issue in dinner.GetRuleViolations()) {
ModelState.AddModelError(issue.PropertyName, issue.ErrorMessage);
}
return View(dinner);
}
}
jQuery $ .ajax
function hijack(form, callback, errorFunction, format) {
$.ajax({
url: form.action,
type: form.method,
dataType: format,
data: $(form).serialize(),
success: callback,
error: function(xhr, textStatus, errorThrown) {
errorFunction(xhr, textStatus, errorThrown);
}
});
}
अजाक्स, नियंत्रक की "कोशिश" भाग
try
{
UpdateModel(dinner);
dinnerRepository.Save();
return PartialView("PartialDetails", new { id=dinner.DinnerID });
}
, लेकिन आप पकड़ भाग के बारे में क्या करते हो हो जाता है का उपयोग करना?
एक साधारण त्रुटि हैंडलिंग समाधान वापस भेजने के लिए एक त्रुटि
catch(Exception ex)
{
Response.StatusCode = 500;
return Content("An Error occured.");
//throw ex;
}
होगा, लेकिन है कि MVC में निर्मित मजबूत modelstate के माध्यम से पास नहीं। मैंने कई विकल्पों के बारे में सोचा, लेकिन मुझे वास्तव में 2 चीजें चाहिए:
- मैं चाहता हूं कि jQuery की त्रुटि विशेषता में त्रुटि को संभाला जाए।
- मैं जितना संभव हो एएसपी.NET एमवीसी सत्यापन तर्क में निर्मित करना चाहता हूं।
क्या यह संभव है? यदि नहीं, तो आप किस सर्वोत्तम विकल्प के बारे में जानते हैं?
बहुत धन्यवाद।
अद्यतन मैंने इसे अभी तक उत्तर के रूप में चिह्नित नहीं किया है, क्योंकि मैंने अभी तक लागू नहीं किया है जो मुझे लगता है कि मुझे सबसे अच्छा काम करेगा।
मैंने फैसला किया है कि मुझे वास्तव में सफलता पसंद नहीं है => ताज़ा सूची भेजें, विफलता => त्रुटि संदेश दृष्टिकोण जो मैं ले रहा था। मैंने कॉल की संख्या को कम करने के लिए ऐसा किया, लेकिन एक ताज़ा सूची वास्तव में पृष्ठ पर सेट की जा रही है। दोनों को करने के लिए कोशिश कर रहे हैं पॉपअप को अपने समग्र पृष्ठ पर कसकर बांधता है।
मैं एक कस्टम jQuery ईवेंट जोड़ने जा रहा हूं जब संवाद बंद हो जाता है तो मास्टर पेज सूची को रीफ्रेश करें। संक्षेप में, यह पर्यवेक्षक पैटर्न है। मुझे यह विचार पसंद है कि पृष्ठ पॉपअप को बताए बिना "मुझे बताए जाने पर बताएं" (उर्फ बंद), पॉपअप को बताने के बिना क्यों। इसके लिए एक अतिरिक्त कॉल की आवश्यकता है, लेकिन मुझे यह एक बड़ी समस्या के रूप में नहीं दिख रहा है।
मुझे अभी भी यकीन नहीं है कि मैं सर्वर-साइड सत्यापन को कितना अच्छा/नापसंद करता हूं और मैं क्लाइंट-साइड केवल सत्यापन के साथ जाने पर विचार कर रहा हूं। जबकि सर्वर साइड सत्यापन क्लीन लेयरिंग की तरह दिखता है, इसमें भी कई समस्याएं हैं, जिनमें
1) यह शुरुआत के बजाय अंत में गुणवत्ता जांच रखता है। विनिर्माण के लिए एक समानता एक ऐसी कार होगी जो लेन-देन पर आने पर जांच की जाती है, बल्कि उस प्रक्रिया के बिंदुओं पर जहां इसे बनाया जा रहा है।
2) यह अजाक्स के इरादे का उल्लंघन करता है। अजाक्स सिर्फ अतुल्यकालिक घटनाओं को भेजने के बारे में नहीं है, यह केवल वही चीज़ भेजने के बारे में है जो मुझे चाहिए और केवल वही प्राप्त करना जो मुझे चाहिए। त्रुटि विवरण प्रदान करने के लिए पूरे मॉडलस्टेट को वापस भेजना अजाक्स के साथ नहीं लगता है।
मैं जो करने के बारे में सोच रहा हूं वह क्लाइंट-साइड केवल सत्यापन है, लेकिन क्लाइंट को यह बताने के लिए कि सर्वर कोड और कस्टम व्यूमोडेल का उपयोग क्लाइंट को गतिशील रूप से उन सत्यापन नियमों को कैसे बनाया जाए।
मुझे यह भी संदेह है कि आयरनआरबी या आयरनपीथन जैसी गतिशील भाषा इन समस्याओं को हल करने के लिए एक और अधिक शानदार तरीका प्रदान कर सकती है, लेकिन इससे पहले कि मैं उस संभावना को देख सकूं, यह थोड़ा लंबा हो सकता है।
अच्छी तरह से मुझे लगता है कि यह वास्तव में परिदृश्य पर निर्भर करता है, अगर 2 अनुरोध करना कोई समस्या नहीं है तो मैं इसके लिए जाऊंगा।व्यक्तिगत रूप से क्लाइंट साइड पर जावास्क्रिप्ट के साथ बहुत से सत्यापन करना कुछ ऐसा नहीं है जिसे मैं प्यार करता हूं (मुझे नहीं पता कि क्यों, लेकिन मुझे कुछ ऐसा लगता है जो बहुत भरोसेमंद/सुरक्षित/समान रूप से लागू नहीं होता है (इस में एक jquery दिन को बचाता है), विशेष रूप से क्योंकि कभी-कभी आप क्लाइंट साइड पर सभी मान्यताओं को नहीं कर सकते हैं, आपको किसी प्रकार की अलग-अलग साइड चेक का उपयोग करना चाहिए, जैसे कि (यह इकाई पहले से ही डीबी में मौजूद है?), और जेएस अक्षम ग्राहकों का समर्थन करें, लेकिन जैसा कि मैंने शुरुआत में कहा था परिदृश्य पर निर्भर करता है। – JOBG
मैं मानता हूं कि आप क्लाइंट पक्ष पर सभी सत्यापन नहीं कर सकते हैं, ऐसा लगता है कि सत्यापन फ्रेमवर्क मुख्य रूप से फ़ील्ड त्रुटियों (बहुत लंबा, तारीख नहीं, आदि) के लिए तैयार है। कम से कम उदाहरणों में मैंने देखा है। जब आप उपयोगकर्ता इनपुट की जांच कर रहे हैं, तो जावास्क्रिप्ट जांच करने के लिए उचित जगह लगता है। – John
मैंने एक के बजाय 2 कॉल करने के बारे में अपने निर्णय की पुष्टि की है, क्योंकि यह इसके नीचे पृष्ठ दृश्य से विवरण आंशिक दृश्य जोड़ता है। मैं चाहता हूं कि पॉपअप पृष्ठ दृश्य पर वापस कहें "मैं बंद हूं", लेकिन पृष्ठ दृश्य क्या करने जा रहा है इसके बारे में कुछ भी नहीं पता। jQuery को बिना किसी प्रयास के इसे संभव बनाना चाहिए। इससे मुझे चिंता करने में मदद मिलती है कि मेरे विवरण में परिवर्तन आंशिक दृश्य पृष्ठ को प्रभावित करेगा और इसके विपरीत। – John