के साथ jQuery सत्यापन को मैन्युअल रूप से सक्षम करने के लिए कैसे करें मैं एएसपी.नेट एमवीसी के साथ वायर्ड के रूप में jQuery सत्यापन के कुछ मूलभूत बातें समझने के लिए संघर्ष कर रहा हूं।एएसपी.नेट एमवीसी
इस प्रश्न का संक्षिप्त संस्करण यह है: मैं कौन सा जादू खो रहा हूं जो jQuery सत्यापन को करने के लिए @Html.EditorFor()
द्वारा उत्पादित कोड की अनुमति देता है, लेकिन काम नहीं करता है, मैं एक ही HTML का उपयोग करके अपने स्वयं के jQuery सत्यापन को तार करने का प्रयास करता हूं?
एक सीखने अभ्यास के रूप में (और क्योंकि यह की नकल करता क्या मैं वास्तव में मेरे वेबसाइट में क्या करना चाहते हैं) मैं दृश्य स्टूडियो 2012 में एक नया MVC 4 एप्लिकेशन मैं एक दृश्य मॉडल जोड़ा बनाया:
using System.ComponentModel.DataAnnotations;
namespace ValidationTest.Models
{
public class MyViewModel
{
[Required]
public string MyStringValue { get; set; }
}
}
और मैं संशोधित दृश्य \ होम \ Index.cshtml इस तरह मेरे विचार मॉडल पर आधारित एक बनाने के लिए करें:
@model ValidationTest.Models.MyViewModel
@using (Html.BeginForm(new { id = "MyForm" })) {
@Html.LabelFor(m => m.MyStringValue)
@Html.EditorFor(m => m.MyStringValue)
@Html.ValidationMessageFor(m => m.MyStringValue)
<br />
<input type="submit" value="Submit" />
}
अंत में, मैं घर नियंत्रक की तरह, फार्म के लिए दृश्य मॉडल की आपूर्ति करने और संबद्ध पोस्ट को संभालने के लिए संशोधित यह:
using System.Web;
using System.Web.Mvc;
using ValidationTest.Models;
namespace ValidationTest.Controllers
{
public class HomeController : Controller
{
[HttpGet]
public ActionResult Index()
{
var viewModel = new MyViewModel();
return View(viewModel);
}
[HttpPost]
public ActionResult Index(MyViewModel viewModel)
{
if (!ModelState.IsValid) return View(viewModel);
return RedirectToAction("About");
}
public ActionResult About()
{
ViewBag.Message = "Your app description page.";
return View();
}
public ActionResult Contact()
{
ViewBag.Message = "Your contact page.";
return View();
}
}
}
जब मैं प्रोजेक्ट चलाता हूं, तो वेब पेज एक टेक्स्ट बॉक्स प्रदर्शित करता है और जादुई रूप से मान्य करता है कि उपयोगकर्ता को एक मान दर्ज करना होगा। अब तक बहुत अच्छा ...
अब, मेरा वास्तविक ऐप एक ऑनलाइन सर्वेक्षण है। यह एक स्क्रिप्ट के आधार पर प्रश्नों और अनुरोधों को हल करता है। मेरे वास्तविक व्यूमोडेल में वे गुण होते हैं जो प्रश्न के पाठ, उपयोगकर्ता द्वारा प्रदान किए गए मूल्य इत्यादि में मैप करते हैं। व्यूमोडेल में एक बूलियन आवश्यक संपत्ति भी होती है जो निर्दिष्ट करती है कि उपयोगकर्ता को मूल्य प्रदान करना चाहिए या नहीं (यानी, सक्षम करने के लिए या नहीं दृश्य में "आवश्यक" सत्यापन) - इसलिए इसका मतलब है कि मुझे अपने व्यूमोडेल में MyStringValue प्रॉपर्टी पर [Required]
विशेषता को निकालना होगा और व्यूमोडेल में आवश्यक संपत्ति के आधार पर अपना स्वयं का सत्यापन जादू प्रदान करना होगा।
यह वह जगह है जहां मैं खो जाता हूं। आईई में, मैं देख सकता हूँ कि @ html.xxx नमूना एप्लिकेशन (ऊपर उल्लिखित है) में कॉल फार्म के लिए इस HTML पैदा करता है:
<label for="MyStringValue">MyStringValue</label>
<input class="text-box single-line"
data-val="true"
data-val-required="The MyStringValue field is required."
id="MyStringValue"
name="MyStringValue"
type="text"
value="" />
<span data-valmsg-for="MyStringValue" data-valmsg-replace="true"></span>
लेकिन मैं किसी भी HTML कहीं पृष्ठ पर नहीं दिख रहा है कि स्पष्ट रूप से संदर्भ jQuery-सत्यापन लाइब्रेरी, और न ही मुझे जावास्क्रिप्ट कोड दिखाई देता है जो सत्यापन को सक्षम बनाता है, इसलिए मुझे समझ में नहीं आता कि यह बिल्कुल क्यों काम करता है।
इसके अलावा, अगर मैं [Required]
विशेषता को हटा देता हूं, और ऊपर दिए गए HTML को छोड़ने के लिए दृश्य को हार्ड कोड (जादू @ html.xxx() कॉल के बिना) तो कोई सत्यापन नहीं होता है।
मुझे क्या याद आ रही है?
कारण "मैं उस पृष्ठ पर कहीं और HTML नहीं देखता जो स्पष्ट रूप से jQuery-सत्यापन लाइब्रेरी का संदर्भ देता है" क्योंकि यह वहां नहीं है। सर्वर जानता है कि दृश्य मॉडल पर लागू सत्यापन गुणों के आधार पर सत्यापन कैसे करें, लेकिन उत्तर में वर्णित क्लाइंट-साइड jQuery सत्यापन स्पष्ट रूप से सक्षम होना चाहिए। एक महान स्पष्टीकरण के लिए –