Tôi đang đấu tranh để hiểu một số khái niệm cơ bản về xác nhận hợp lệ jQuery như được kết nối với ASP.NET MVC.Làm thế nào để tự kích hoạt tính năng xác nhận hợp lệ jQuery với ASP.NET MVC
Phiên bản ngắn của câu hỏi này là: Tôi thiếu điều gì cho phép mã được tạo bởi @Html.EditorFor()
để thực hiện xác thực jQuery, nhưng không hoạt động Tôi cố gắng kết nối xác thực jQuery của riêng tôi bằng cách sử dụng cùng một HTML chính xác?
Như một bài tập học tập (và bởi vì nó bắt chước những gì tôi thực sự muốn làm trong trang web của tôi) Tôi tạo ra một ứng dụng MVC 4 mới trong Visual Studio 2012. Tôi đã thêm một mô hình điểm:
using System.ComponentModel.DataAnnotations;
namespace ValidationTest.Models
{
public class MyViewModel
{
[Required]
public string MyStringValue { get; set; }
}
}
và tôi Lần sửa đổi \ Home \ Index.cshtml để tạo ra một hình thức dựa trên mô hình quan điểm của tôi như thế này:
@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" />
}
Cuối cùng, tôi sửa đổi bộ điều khiển Home để cung cấp các mô hình xem mẫu và xử lý POST liên quan, như điều này:
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();
}
}
}
Khi tôi chạy dự án, trang web sẽ hiển thị hộp văn bản và xác thực một cách kỳ diệu rằng người dùng phải nhập giá trị. Cho đến nay rất tốt ...
Bây giờ, ứng dụng thực tế của tôi là bản khảo sát trực tuyến. Nó hiển thị các câu hỏi và trả lời các câu trả lời dựa trên một kịch bản. Dạng xem thực tế của tôi chứa các thuộc tính ánh xạ tới văn bản của câu hỏi, giá trị do người dùng cung cấp, v.v. Chế độ xem cũng chứa thuộc tính Bắt buộc Boolean chỉ định người dùng có phải cung cấp giá trị hay không. "yêu cầu" xác nhận trong Xem) - vì vậy điều này có nghĩa rằng tôi cần phải loại bỏ các [Required]
thuộc tính trên tài sản MyStringValue trong viewmodel của tôi và cung cấp ma thuật xác nhận của riêng tôi dựa trên tài sản bắt buộc trong viewmodel.
Đây là nơi tôi bị lạc. Trong IE, tôi có thể thấy rằng @ html.xxx gọi trong ứng dụng mẫu (nêu trên) tạo ra HTML này đối với hình thức:
<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>
Nhưng tôi không thấy bất kỳ HTML ở đâu đó trên trang đó rõ ràng là tài liệu tham khảo thư viện xác thực jQuery, cũng như tôi không thấy mã JavaScript cho phép xác thực, vì vậy tôi không hiểu tại sao nó lại hoạt động.
Hơn nữa, nếu tôi xóa thuộc tính [Required]
và mã hóa cứng Chế độ xem để phát ra HTML ở trên (không có phép gọi @ html.xxx()) thì không có xác thực nào xảy ra.
Tôi đang thiếu gì?
Lý do "Tôi không thấy bất kỳ HTML nào khác trên trang rõ ràng tham chiếu thư viện xác thực jQuery" là vì nó không có ở đó. Máy chủ biết cách thực hiện xác nhận hợp lệ dựa trên các thuộc tính xác nhận được áp dụng cho mô hình khung nhìn, nhưng xác nhận hợp lệ jQuery phía máy khách phải được kích hoạt một cách rõ ràng như được mô tả trong câu trả lời. –