2016-09-07 7 views
0

で暗黙的にコントローラにAjaxリクエストを送信:は、私は、入力の多くの形を持っているAsp.Net

<input type="text" id="SomeName1" name="SomeName1" /> 
<input type="text" id="SomeName2" name="SomeName2" /> 
etc... 

すべてのこれらの入力は、私のviewmodelの一部です:

public class MyViewModel 
{ 
    public string SomeName1 { get; set; } 
    public string SomeName2 { get; set; } 
    //etc... 
} 

は、私はすべて更新する必要がありますこれらの入力はページ全体をリフレッシュせずに済むので、Ajaxリクエストを使用する必要があります。

var viewModel = 
{ 
    SomeName1: $("#SomeName1").val(), 
    //etc... 
} 
var request = $.ajax({ 
    url: '@Url.Action("UpdateAction", "SomeController")', 
    type: "POST", 
    cache: false, 
    data: viewModel, 
    datatype: "json" 
}) 
request.done(function (data) { 
    $("#SomeName1").val(data.SomeName1); 
    //etc...         
}) 

ので、編集して、サポートするのは難しいですコピー&ペーストコード、がたくさんある。しかし、問題は、我々が明示的にJavaScriptでのviewmodelを定義し、このように、jquery.ajax経由で送る必要があります。

例のように明示的にすべての入力からデータを送信し、そのデータすべてに明示的に新しいデータを設定する必要はありません。

どうすればよいですか?

+3

あなたの質問は全く明確ではありません。 –

+0

あなたは何をしたいのかを説明できますか?詳細を教えてください – mayk

+0

@RoryMcCrossan編集された質問、追加された例。 –

答えて

0

私にどのように私はそれを解決することができますアイデアを与えるmaykの答え、に基づいて、私は簡単な解決策書いた:

$.fn.serializeObject = function() { 
    var o = {}; 
    var a = this.serializeArray(); 
    $.each(a, function() { 
     if (o[this.name] !== undefined) { 
      if (!o[this.name].push) { 
       o[this.name] = [o[this.name]]; 
      } 
      o[this.name].push(this.value || ''); 
     } else { 
      o[this.name] = this.value || ''; 
     } 
    }); 
    return o; 
}; 

にフォームをシリアライズ:

var viewModel = $("#myFormId").serializeObject(); 
var request = $.ajax({ 
    url: '@Url.Action("UpdateAction", "SomeController")', 
    type: "POST", 
    cache: false, 
    data: viewModel, 
    datatype: "json" 
}) 
request.done(function (data) { 
     $.each(data, function (key, value) { 
      $("#myFormId) input[name=" + key + "]").val(value); 
     });        
}) 

var viewModel = 
{ 
    SomeName1: $("#SomeName1").val(), 
    //etc... 
} 

Javascriptオブジェクトを使用して、viewmodelをコントローラに送信し、このビューモデルを再度返します。返されたviewmodelは、対応する名前を持つフォームの各入力に単純に適用されます。

関連する問題