2016-04-12 9 views
1

ASP.NETコントローラモデルを、データをFormDataとして送信するajaxリクエストと自動的にバインドすることは可能ですか?私の提供例でモデルのバインドJavaScript形式のFormDataとAsp.netコントローラのモデル

私はがHttpContext.Current.Request.Form [「PROPERTY_NAME」] がデータを受信するために使用するために必要だから私はすべて、送信されたフォームデータと同一のモデルを提供する場合値はnullに等しい。

またはASP.NETモデルバインディングはJSON要求でのみ機能しますか?

簡単なコードの怒鳴る:

ビュー:

@using (Html.BeginForm("Post", "Test", FormMethod.Post, new { @class="test-form"})) 
{ 
    <input type="text" name="firstName"/> 
    <input type="text" name="lastName"/> 
    <button type="submit">Submit</button> 
} 

スクリプト:

<script> 
    $('.test-form').on('submit', function (e) { 
     e.preventDefault(); 
     var formData = new FormData(this); 

     $.ajax({ 
      url: "@Url.Action("TestPost", "Test")", 
      method: "POST", 
      data: formData, 
      processData: false, 
      success: function(e){ 
      } 
     }); 
    }); 
</script> 

コントローラー:

[HttpPost] 
    public ActionResult TestPost() 
    { 
     var firstname = HttpContext.Current.Request.Form["firstName"]; 
     var lastName = HttpContext.Current.Request.Form["lastName"]; 
     return PartialView("TestPost"); 
    } 

が機能しないコントローラ:

public class User 
{ 
    public string firstName { get; set; } 
    public string lastName { get; set; } 
} 

    [HttpPost] 
    public ActionResult TestPost(User model) //model values are null 
    { 

     return PartialView("TestPost"); 
    } 
+0

使用Ajax.BeginFormこのリンクをチェックしhttp://www.hanselman.com/blog/ASPNETMVCPreview4UsingAjaxAndAjaxForm.aspx – rashfmnb

+1

あなたは 'ContentTypeを忘れてしまった:私のAJAX要求は、JSファイルであればどのような@rashfmnb – Musa

+0

'、偽の? – Stralos

答えて

3

ajaxでFormDataオブジェクトを使用すると、データはmultipart/form-dataとして送信され、コンテンツタイプヘッダーは自動的に正しい境界で設定されます。
コンテンツタイプを上書きして、必要なものを設定することができます。これはここで行われます。
あなたはよく考えているかもしれませんが、私はそれをやっていませんでした。いい友達のjQueryがあなたのためにやったのです。これはあなたのための$ .ajaxのデフォルトのコンテンツタイプを設定します(application/x-www-form-urlencoded)。
jQueryがコンテンツタイプヘッダを設定しないようにするには、contentTypeパラメータをfalseに設定する必要があります。詳細については、

関連する問題