jestem stara się zrozumieć niektóre z podstaw walidacji jQuery jako przewodowy z ASP.NET MVC.Jak ręcznie włączyć sprawdzanie poprawności jQuery z ASP.NET MVC
Krótka wersja tego pytania brzmi: Jakiej magii brakuje mi, która pozwala na kod produkowany przez @Html.EditorFor()
, aby wykonać walidację jQuery, ale nie działa Próbuję podłączyć moją własną walidację jQuery używając dokładnie tego samego HTML?
Jako wykonywania uczenia się (i ponieważ naśladuje to, co naprawdę chcesz robić w mojej stronie) I stworzył nowy MVC 4 aplikację w Visual Studio 2012. I dodanej model wyświetlania:
using System.ComponentModel.DataAnnotations;
namespace ValidationTest.Models
{
public class MyViewModel
{
[Required]
public string MyStringValue { get; set; }
}
}
i ja zmodyfikowane Views \ home \ Index.cshtml utworzyć formularz na podstawie mojego modelu widoku jak ten:
@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" />
}
Wreszcie zmodyfikowany kontroler Home na dostawę widoku modelu do formy i do obsługi związanej POST, jak to:
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();
}
}
}
Kiedy uruchomić projekt, strona internetowa wyświetla pole tekstowe i magicznie sprawdza, czy użytkownik musi wprowadzić wartość. Do tej pory tak dobrze ...
Teraz moja rzeczywista aplikacja jest ankieta online. Wyświetla pytania i pozyskuje odpowiedzi w oparciu o skrypt. Mój rzeczywisty model widoku zawiera właściwości, które odwzorowują na tekst pytania, wartość dostarczoną przez użytkownika itp. Model widoku również zawiera właściwość typu Boolean, która określa, czy użytkownik musi podać wartość (tj. Czy włączyć, czy nie, "wymagane" sprawdzanie poprawności w widoku) - oznacza to, że muszę usunąć atrybut [Required]
we właściwości MyStringValue w moim widoku i podać własną magię sprawdzania poprawności w oparciu o wymaganą właściwość w module viewmodel.
To gdzie ja zgubić. W IE, widzę, że @ html.xxx wzywa w aplikacji próbki (opisanego powyżej) produkuje ten kod HTML do postaci:
<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>
Ale nie widzę żadnego HTML w innym miejscu na stronie, która oczywiście referencje biblioteka sprawdzania poprawności jQuery, ani nie widzę kodu JavaScript, który umożliwia sprawdzanie poprawności, więc nie rozumiem, dlaczego to działa.
Co więcej, jeśli usuniemy atrybut [Required]
i zakodowuję widok w celu wyświetlenia powyższego kodu HTML (bez wywołań magic @ html.xxx(), to w ogóle nie nastąpi weryfikacja.
Czego mi brakuje?
Powód "Nie widzę żadnego kodu HTML w innym miejscu na stronie, który w oczywisty sposób odwołuje się do biblioteki sprawdzania poprawności jQuery", ponieważ go nie ma. Serwer wie, jak przeprowadzić sprawdzanie poprawności na podstawie atrybutów sprawdzania poprawności zastosowanych do modelu widoku, ale sprawdzanie poprawności jQuery po stronie klienta musi być jawnie włączone zgodnie z opisem w odpowiedzi. –