1

投稿された値が必要な場合のポストバックリクエストでは、このようにします

[HttpPost]
public ActionResult Index()
{
    //i need to get values in here not in action method argument
    //i know this works but not like this --> ActionResult Index(string Name)

    string Name = Request.Form["Name"];
}  

しかし、ajaxリクエストでは、これは機能しません。また、mvcストアのajaxが投稿した値を見つけることができません。

助言がありますか?

4

2 に答える 2

2

私はパーティーに少し遅れていますが、Ajaxの投稿/フォームを使用してRequest.Formにアクセスできる代替手段を提供します。これはMVC4とjQuery1.9.1でテストされました。

application/jsonコントローラーのRequest.FormがAjax投稿に入力されていない場合は、contentTypeが(一般的なシナリオ)のデータを手動でシリアル化してコントローラーに送信している可能性があります。

これは、コントローラーにRequest.Formを設定しないjQuery.ajaxの例です。

    // JSON serialized form data.
    var data = {"id" : "1234", "name" : "Dave"};

    $.ajax({
        type: "POST",
        url: serviceUrl,
        contentType: "application/json",
        dataType: "json",
        data: JSON.stringify(data || {}),
        success: function () { }
    });

contentTypeを変更すると、コントローラーはフォーム送信のように投稿を処理します。

    // Form encoded data.  See jQuery.serialize().
    var data = "id=1234&name=Dave";

    $.ajax({
        type: "POST",
        url: serviceUrl,
        contentType: "application/x-www-form-urlencoded; charset=UTF-8",
        dataType: "json",
        data: data,
        success: function () { }
    });

application/x-www-form-urlencoded; charset=UTF-8jQueryのデフォルトであるため、contentTypeを未定義のままにすることもできます。

何が起こっているのかをよりよく説明するために$.ajaxのみを使用したことに注意してください。$ .postを使用することもできますが、フォームでエンコードされたデータを送信する必要があります

于 2013-03-12T14:51:47.463 に答える
0

ajaxで投稿された値はコレクションからのリクエストには表示されませんがValueProvider、MVCのインフラストラクチャを使用して、Ajaxで投稿された値を取得できます。

[HttpPost]
public ActionResult Index()
{
    Name = ValueProvider.GetValue("Name").AttemptedValue;
}  

または、Request.InputStreamに投稿されたすべてのデータが含まれており、必要に応じて読み取りおよび脱セラリゼーションを行うことができます。

[HttpPost]
public ActionResult Index()
{
    var serializer = new JavaScriptSerializer();
    using (var streamReader = new StreamReader(Request.InputStream))
    {
        var data = (Dictionary<string,object>)serializer
                      .DeserializeObject(streamReader.ReadToEnd());
        //assuming your posted data looks like this: '{"Name": "test"}'
        string name = data["Name"].ToString();
    }
}  

ただし、MVCインフラストラクチャと戦って、アクションパラメータとしてデータを受け取ることは強くお勧めします。

[HttpPost]
public ActionResult Index(string name)
{

}  
于 2012-09-15T06:40:39.433 に答える