2013-05-23 10 views
8

tôi có mô hình sau:mẫu ràng buộc với jquery ajax serialize không làm việc

public class RegisterUseraccount 
{ 
    [Required] 
    [DataType(DataType.EmailAddress)] 
    [Display(Name = "E-Mail-Adresse")] 
    public string Email { get; set; } 

    [Required] 
    [Display(Name = "Vorname")] 
    public string FirstName { get; set; } 

    [Required] 
    [Display(Name = "Nachname")] 
    public string LastName { get; set; } 

    [Required] 
    [DataType(DataType.Password)] 
    [MinLength(5)] 
    [Display(Name = "Passwort")] 
    public string Password { get; set; } 

    ... 
} 

Và quan điểm sau đây:

@using (Html.BeginForm("Register", "Useraccount", FormMethod.Post, new { id = "registerUseraccountForm", @class = "ym-form" })) 
{ 
    @Html.ValidationSummary(true)   

    <div class="ym-grid"> 
     <div class="ym-g50 ym-gl"> 
      <div class="ym-fbox-text"> 
       @Html.LabelForRequired(model => model.RegisterUseraccount.FirstName, null)    
       @Html.EditorFor(model => model.RegisterUseraccount.FirstName, new { required = "required", name = "firstName" }) 
       @Html.ValidationMessageFor(model => model.RegisterUseraccount.FirstName)     
      </div> 
     </div> 
    ... 

và JavaScript của tôi

function sendForm(target) { 
    alert(data); 
    $.ajax({ 
     url: target, 
     type: "POST", 
     contentType: 'application/json', 
     data: $("#registerUseraccountForm").serialize(), 
     success: ajaxOnSuccess, 
     error: function (jqXHR, exception) { 
      alert('Error message.'); 
     } 
    }); 

Đây là kết quả của việc tuần tự hóa:

RegisterUseraccount.FirstName=Peter&RegisterUseraccount.LastName=Miller&RegisterUseraccount.Email=miller%40gmail.com&RegisterUseraccount.Password=admin 

Đây là phương pháp điều khiển của tôi, tôi đang cố gắng để POST để:

[HttpPost] 
public ActionResult Register(RegisterUseraccount registerUseraccount) 
{ 
    ... 
} 

... nhưng dữ liệu không đến phương pháp này, tôi nhận được một lỗi 404. Tôi nghĩ rằng ModelBinder có thể' t làm việc.

Dữ liệu hoạt động là dữ liệu được gửi với tên firstName = Peter, nhưng những gì thực sự được gửi là RegisterUseraccount.FirstName = Peter.

Tôi làm cách nào để xử lý sự cố này?

+0

Bạn có chắc chắn 'url' là đúng? – Zabavsky

+0

Bạn đang gọi phương thức 'sendForm' ở đâu? – Shyju

+0

xóa 'contentType: 'application/json',' –

Trả lời

21

loại bỏ contentType: 'application/json', và sửa đổi nó để tốt hơn (theo quan điểm của tôi)

$('#registerUseraccountForm').submit(function() { 
    if ($(this).valid()) { 
     $.ajax({ 
      url: this.action, 
      type: this.method, 
      data: $(this).serialize(), 
      beforeSend: function() { 

      }, 
      complete: function() { 

      }, 
      ... 
+2

Bạn đã đúng, tất cả những gì tôi phải làm là xóa contentType ... Cảm ơn bạn! – mosquito87

2

Có lẽ bạn có mô hình này

public class YourModel 
{ 
    public RegisterUseraccount RegisterUseraccount { get; set; } 
} 

Trong trường hợp này bạn cần phải đặt các mô hình tương ứng với hành động của bạn:

[HttpPost] 
public ActionResult Register(YourModel model) 
{ 
    var registerUseraccount = model.RegisterUseraccount; 
    ... 
} 

Hoặc:

@using (Html.BeginForm("Register", "Useraccount", FormMethod.Post, new { id = "registerUseraccountForm", @class = "ym-form" })) 
{ 
    @{ Html.RenderPartial("RegisterUseraccount"); } 
} 

RegisterUseraccount.cshtml

@model YourNamespace.RegisterUseraccount 

@Html.ValidationSummary(true)   

<div class="ym-grid"> 
    <div class="ym-g50 ym-gl"> 
     <div class="ym-fbox-text"> 
      @Html.LabelForRequired(model => model.FirstName, null)    
      @Html.EditorFor(model => model.FirstName, new { required = "required", name = "firstName" }) 
      @Html.ValidationMessageFor(model => model.FirstName)     
     </div> 
    </div> 

nhưng bạn sẽ phải thay đổi một số thứ như @Html.ValidationSummary (true).

Sửa

hoặc đơn giản nhất:

data: $("#registerUseraccountForm").serialize().replace("RegisterUseraccount.",""), 

Sửa II

data: $("#registerUseraccountForm").serialize().replace(/RegisterUseraccount./g,""), 
+0

.replace() chỉ thay thế phiên bản đầu tiên của chuỗi, vì vậy nó không hoạt động. – mosquito87

+0

Điều này đã làm việc: var data = $ ("# registerUseraccountForm"). Serialize(). Replace (new RegExp ("RegisterUseraccount.", "G"), ''); – mosquito87

+1

@ mosquito87 cảm ơn cho các ý kiến, tôi đã sửa mã javascript –