Làm cách nào để việc kiểm tra tính hợp lệ dữ liệu xảy ra ở view và action Create

Một phần của tài liệu Tạo ứng dụng ASP mvc (Trang 64 - 66)

ở view và action Create

Có thể bạn sẽ thắc mác tại sao giao diện kiểm tra hợp lệ dữ liệu lại được tạo ra mà không cần phải thay đổi gì controller và views, chúng ta sẽ sớm được giải đáp khi xem xét các đoạn mã được Visual

Studio tự động tạo ra cho chúng ta.

Đầu tiên là phương thức Create của TaskController.

public ActionResult Create() { return View(); } // // POST: /Task/Create [HttpPost]

public ActionResult Create(Task task) { if (ModelState.IsValid) { task.CreateDate = DateTime.Now; db.Tasks.Add(task); db.SaveChanges();

return RedirectToAction("Index"); }

return View(task); }

Phương thức thứ nhất hiển thị form Create. Phương thức thứ hai dùng để xử lý post request. Phương thức thứ hai sử dụng phương thức ModelState.IsValid để kiểm tra xem thử tác vụ có lỗi hợp lệ dữ liệu nào không? Phương thức này sẽ kiểm tra tất cả các luật mà bạn quy định về kiểm tra tính hợp lệ dữ liệu đối với đối tượng Tasks, trong trường hợp có lỗi, thì action sẽ hiển thị lại form nhập dữ liệu để hiển thị lỗi và cho phép bạn nhập lại dữ liệu cho đúng. Nếu không có lỗi nào, phương thức sẽ lưu

đối tượng Task mới vào database.

Mã lệnh tiếp theo đó là tập tin Create.cshtml mà bạn đã yêu cầu Visual Studio tạo ra trong bài viết trước, view này dùng để hiển thị form nhập liệu để tạo mới Task, hoặc hiển thị thông tin Task có lỗi không hợp lệ và chưa được chấp nhận lưu vào database.

@model ToDoApp.Models.Task @{ ViewBag.Title = "Create"; } <h2>Create</h2> <script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script> <script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script> @using (Html.BeginForm()) { @Html.ValidationSummary(true) <fieldset>

<legend>Task</legend>

<div class="editor-label">

@Html.LabelFor(model => model.Content) </div>

<div class="editor-field">

@Html.EditorFor(model => model.Content)

@Html.ValidationMessageFor(model => model.Content) </div>

<div class="editor-label">

@Html.LabelFor(model => model.Priority) </div>

<div class="editor-field">

@Html.EditorFor(model => model.Priority)

@Html.ValidationMessageFor(model => model.Priority) </div>

<div class="editor-label">

@Html.LabelFor(model => model.DueDate) </div>

<div class="editor-field">

@Html.EditorFor(model => model.DueDate)

@Html.ValidationMessageFor(model => model.DueDate) </div>

<p>

<input type="submit" value="Create" />

</p>

</fieldset>

}

<div>

@Html.ActionLink("Back to List", "Index")

</div>

Bạn cần lưu ý đến phương thức Html.EditorFor(), phương thức này giúp sinh ra mã HTML tương ứng với mỗi thuộc tính của lớp Task. Tiếp theo, cần phải quan tâm đến phương thức Html.ValidationMessageFor, phương thức này nhằm hiển thị các lỗi về kiểm tra hợp lệ dữ liệu đối với

mỗi thuộc tính của đối tượng Task. Ưu điểm của cách tiếp cận này đó là controller và view đều không biết gì về các quy tắc kiểm tra tính hợp lệ dữ liệu, các quy tắc này chỉ được quy định ở lớp Task.

Nếu bạn muốn thay đổi quy tắc kiểm tra hợp lệ dữ liệu, bạn chỉ cần thay đổi tại một nơi, và đặc biệt là bạn có thể sử dụng nó tại mọi nơi. Điều này sẽ giúp cho mã lệnh sạch sẽ và dễ bảo trì. Nói một cách khác bạn đang áp dụng nguyên lý DRY (Don’t Repeat Yourself).

Một phần của tài liệu Tạo ứng dụng ASP mvc (Trang 64 - 66)