2013-05-23 18 views
8

を働いていないシリアライズシリアライズの種類:モデルは、私は次のモデルを持っている

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

これは私がに投稿しようとしている私のコントローラのメソッドです:

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

...しかし、データがメソッドに到着していない、私は「私はmodelbinderができるとは思わエラー404を取得します仕事。

firstName = Peterという名前で送信されるデータは、実際にはRegisterUseraccount.FirstName = Peterという名前で送信されます。

この問題はどのように処理できますか?

+0

IIはあなた 'url'が正しいことを確認していますか? – Zabavsky

+0

'sendForm'メソッドはどこで呼びますか? – Shyju

+0

削除 'contentType: 'application/json'、' –

答えて

21

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

      }, 
      complete: function() { 

      }, 
      ... 
+2

あなたが正しく、あなたがしなければならなかったのはcontentTypeを削除することでした...ありがとう! – mosquito87

2

はたぶん、あなたがあなたのアクションに対応するモデルを配置する必要があり、この場合には、このモデル

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

を持ってcontentType: 'application/json',を削除し、(私の観点から)より良いにそれを変更します。

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

または:

@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> 

いますが、@Html.ValidationSummary (true)のようないくつかのことを変更する必要があります。

編集

または最もシンプル:

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

編集

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

.replace()は文字列の最初のインスタンスだけを置き換えるため、動作しません。 – mosquito87

+0

これはうまくいきました: var data = $( "#registerUseraccountForm")。serialize()。replace(new RegExp( "RegisterUseraccount。"、 "g")、 ''); – mosquito87

+1

@ mosquito87コメントありがとう、私はすでにjavascriptコードを修正 –

関連する問題