2009-10-18 35 views
9

Sử dụng mẫu dự án MVC trong VS2008 (out of the box) tôi nhận thấy như sau:Ajax.BeginForm - Hiển thị lỗi Validation

  1. Sau đây là cách hình thức Register.aspx được chỉ định.

    <% using (Html.BeginForm()) { %> 
    
  2. Chọn nút Đăng ký mà không cung cấp bất kỳ thông tin tài khoản nào cho thấy điều này. Tạo tài khoản không thành công. Vui lòng sửa lỗi và thử lại.

    • Bạn phải chỉ định tên người dùng.
    • Bạn phải chỉ định địa chỉ email.
    • Bạn phải chỉ định mật khẩu có từ 6 ký tự trở lên.

  3. Tôi đã thay đổi biểu mẫu Register.aspx thành hình thức này.

    <% using (Ajax.BeginForm("Register", new AjaxOptions { HttpMethod = "Post" })) { %> 
    
  4. Chọn nút Đăng ký mà không cung cấp thông tin tài khoản sẽ không có lỗi.

Câu hỏi: Làm cách nào để hiển thị văn bản lỗi khi sử dụng Ajax.BeginForm?

Trả lời

14

Để áp dụng thành công việc gửi biểu mẫu ajax, bạn sẽ phải sửa đổi hành động Đăng ký và các chế độ xem. Theo mặc định, trong trường hợp lỗi, hành động này chỉ trả về khung nhìn register.aspx liên quan. Bước đầu tiên sẽ được đưa tóm tắt xác nhận bên trong một điều khiển người dùng cục bộ:

ValidationSummary.ascx:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %> 
<%= Html.ValidationSummary("Account creation was unsuccessful. Please correct the errors and try again.") %> 

Sau đó, bạn bao gồm này một phần bên trong xem Register.aspx:

<div id="validationSummary"> 
    <% Html.RenderPartial("ValidationSummary"); %> 
</div> 

<% using (Ajax.BeginForm(new AjaxOptions { HttpMethod = "POST", UpdateTargetId = "validationSummary" })) { %> 
    FORM CODE HERE 
<% } %> 

Và cuối cùng bạn sửa đổi hành động Đăng ký:

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult Register(string userName, string email, string password, string confirmPassword) 
{ 
    // ... skipped content for clarity 

    // If we got this far, something failed, redisplay form 
    if (Request.IsAjaxRequest()) 
    { 
     // If an ajax request was made return only the validation errors 
     // instead of the whole page 
     return PartialView("ValidationSummary"); 
    } 
    else 
    { 
     return View(); 
    } 
} 

Trong trường hợp đăng ký thành công theo mặc định, hành động Đăng ký chỉ chuyển hướng đến Trang chủ/Chỉ mục. Bạn sẽ phải sửa đổi bit này là tốt, bởi vì khi bạn đang thực hiện một yêu cầu ajax chuyển hướng sẽ không hoạt động. Cũng giống như cách bạn có thể kiểm tra nếu bạn đang gọi hành động không đồng bộ và trả về một số văn bản cho biết đăng ký đã thành công. Văn bản này sẽ được hiển thị bên trong cùng một lỗi div làm lỗi xác thực.


UPDATE:

Một câu hỏi cuối cùng - Thay vì danh sách đạn các thông báo lỗi, làm thế nào tôi nhận được mỗi tin nhắn kiểm soát lỗi để làm bên cạnh việc kiểm soát bằng cách sử dụng Html. Phương thức ValidationMessage ("....") ?

Để đạt được điều này bạn cần phải đặt nội dung của hình thức của bạn bên trong một cái nhìn cục bộ:

<% using (Ajax.BeginForm(
    "register", 
    null, 
    new AjaxOptions { 
     HttpMethod = "POST", 
     UpdateTargetId = "myForm" 
    }, 
    new { 
     id = "myForm" 
    })) { %> 
    <% Html.RenderPartial("RegisterForm"); %> 
<% } %> 

Và trong hành động đăng ký của bạn làm cho đúng một phần:

if (Request.IsAjaxRequest()) 
{ 
    return PartialView("RegisterForm"); 
} 
else 
{ 
    return View(); 
} 
Các vấn đề liên quan