2011-03-04 39 views
21

Tôi xin lỗi nếu điều này đã được yêu cầu, nhưng tôi đã tìm kiếm đôi khi nhưng tất cả tôi đã tìm thấy là bài viết khá cũ (mvc1, mvc2). Tôi có một biểu mẫu mà tôi muốn gửi qua Ajax.asp.net mvc 3 - ajax gửi mẫu và xác nhận

This có vẻ như nó sẽ hoạt động nhưng không bao gồm xác thực phía máy chủ.

1) Tôi không chắc liệu mình có nên sử dụng số AjaxHelper.BeginForm hoặc sử dụng cuộc gọi jquery thô ($.ajax) không? Phương pháp được đề nghị ở đây là gì?

2) Làm cách nào để xử lý xác thực phía máy khách và phía máy chủ? Tôi hy vọng khuôn khổ mvc cung cấp một cơ chế được xây dựng để giải quyết vấn đề này? Có một số xác thực mà tôi chỉ làm phía máy chủ. Việc sử dụng một số ValidationSummary vẫn hoạt động ở đây phải không?

Tôi đang sử dụng asp.net mvc3/dao cạo với xác thực javascript không phô trương.

Cảm ơn bạn!

Chỉnh sửa: (theo yêu cầu của Bobby B bên dưới). này đã được bổ sung tháng sau khi đặt ra câu hỏi như một người dùng muốn biết làm thế nào để sử dụng AjaxHelper

Đây là mã javascript tôi đã sử dụng:

<script type="text/javascript"> 

function ajaxValidate() { 
    return $('form').validate().form(); 
} 

function getGbPostSuccess(ajaxContext){ 
    // .... it is not necessary to do anything here. 
} 
function showFaliure(ajaxContext){ 
    // handle failure 
} 

đoạn mã HTML:

@using (Ajax.BeginForm("Index", "Home", new AjaxOptions 
         { 
          UpdateTargetId = "form1", 
          InsertionMode = InsertionMode.Replace, 
          OnBegin = "ajaxValidate", 
          OnSuccess = "getGbPostSuccess", 
          OnFailure = "showFaliure" 
         })) 
{ 

Trả lời

8

Tôi đã sử dụng malsup's jQuery form plugin trong một thời gian cho mục đích này. Tôi thành thật không quen thuộc với AjaxHelper, nhưng có vẻ như nó sẽ làm những gì bạn đang tìm kiếm. Theo như làm cả xác thực phía máy khách và phía máy chủ, tất cả điều đó sẽ xảy ra chủ yếu tự động miễn là bạn đang sử dụng ràng buộc mô hình và các thuộc tính từ không gian tên System.DataAnnotations.

public class MyModel 
{ 
    [Required(ErrorMessage = "Please enter your name")] 
    public String Name { get; set; } 

    [Required(ErrorMessage = "Please enter your email")] 
    public String Email { get; set; } 

    [Required(ErrorMessage = "Please enter a rating")] 
    [Range(1, 5, ErrorMessage = "The rating must be between 1 and 5")] 
    public Int32 Rating { get; set; } 
} 

[HttpPost] 
public ActionResult Index(MyModel myModel) 
{ 
    if(ModelState.IsValid) 
    { 
     // good to go, put it in the DB or whatever you need to do 
    } 
    else 
    { 
     return View(model); // return the user back to the page, ModelState errors can be viewed using Html.ValidationSummary() or individual Html.ValidationMessageFor() calls 
    } 
} 

Nếu bạn đang làm riêng xác nhận tùy chỉnh server-side của bạn, bạn có thể tạo ra thuộc tính xác nhận riêng của bạn bằng cách tạo ra một thuộc tính mà thực hiện ValidationAttribute, hoặc chỉ cần thêm lỗi xác nhận bằng cách gọi ModelState.Errors.Add () (hoặc một cái gì đó xung quanh, tôi không có tham khảo tiện dụng)

Đối với phía máy khách, MVC sẽ tạo xác nhận khách hàng cho bạn dựa trên các thuộc tính DataAnnotations trên mô hình của bạn.

+0

Cảm ơn bạn! Tôi có việc phải làm bây giờ. Tôi đã sử dụng AjaxHelper. – santiagoIT

+0

Bất kỳ cơ hội nào bạn có thể giải thích về cách bạn sử dụng AjaxHelper? Tôi đang đối mặt với cùng một vấn đề bản thân mình và tôi đang cố gắng quyết định cách tiếp cận tốt nhất để thực hiện là gì. Cảm ơn! –

+0

Tôi sẽ thêm mã ví dụ vào làm bản chỉnh sửa cho câu hỏi. Bằng cách đó tôi có thể định dạng tốt hơn ;-) – santiagoIT

1

MVC.NET 3 đã có điều này ra khỏi hộp. Chỉ cần đảm bảo đã bật ClientValidationEnabled trong web.config. Kiểm tra this

+0

Tôi đã kiểm tra liên kết, nhưng nó giải thích cách bật xác thực phía máy khách. Tôi đã bật tính năng xác thực phía máy khách, thật không may là câu hỏi của tôi. – santiagoIT

Các vấn đề liên quan