0

POSTを使用して、ユーザーからMVCコントローラーにテーブル情報を送信する必要があります(サーバーのセッションに保存するため)。

Sniffer を使用して POST の情報が正常に渡されていることがわかりますが、実際の MVC コントローラーには到達しません (ブレークポイントに到達しません!)。

私のコード:

<script type="text/javascript">
    $(document).ready(function () {
        $("#btnSave").click(function () {
            var tableStr = $("#divTable").html();
            $.post("Home/Save/", tableStr, function (data) {
                if (data) {
                    alert("Great success!");
                }
                else {
                    alert("Fail!");
                }
            });
            return false;
        });
    });
</script>

<h2><%: ViewBag.Message %></h2>
<%=Ajax.ActionLink("Show Users", "LoadUsers", new AjaxOptions() { InsertionMode = System.Web.Mvc.Ajax.InsertionMode.Replace, UpdateTargetId = "divTable" }) %>

<center><div id="divTable"></div></center>
<input type="button" id="btnSave" value="Save" />

コントローラ:

    [HttpPost]
    public ActionResult Save(string tableHtml)
    {
        Session["TableStr"] = tableHtml;
        return new JsonResult() { Data = true };
    }

私は何を間違っていますか?? 何時間もグーグルでした!

この情報をサーバーのセッションに渡す簡単な方法はありますか? これは AJAX (A-Synchronic call) でなければなりません。

4

4 に答える 4

2

投稿を行っている場合は必要です[HttpPost]それでも機能しなかったとしても、削除しないでください。また、JSON データが返されていることを確認する必要があります。

それを行い、コントローラーが実際に正しく参照されていると仮定すると、AJAX 要素を明示的に宣言して、ペイロードの名前を含め、すべてが正しく渡されていることを確認できます。

$("#form").submit(function () {
    $.ajax({           
       type: 'POST',
       dataType: 'json',
       url: '/Home/Save/', 
       data: { tableHtml: tableStr }, 
       success: function (data) {
            ...
       }
    });
});

[HttpPost]
public JsonResult Save(string tableHtml)
{
    Session["TableStr"] = tableHtml;
    return Json(new { Data = "true" });
}
于 2012-06-18T14:52:16.863 に答える
1

/が欠けているように見えます。これを試してください

$.post("/Home/Save/", tableStr , function (data) {
            if (data) {
                alert("Great success!");
            }
            else {
                alert("Fail!");
            }
        });

これを行うことに関するブログ投稿は次のとおりですhttp://bob-the-janitor.blogspot.com/2011/11/more-ajax-with-mvc-using-partial-views.html

于 2012-06-18T13:58:01.993 に答える
1

メソッドをhttppostで装飾する必要があると思います:

[HttpPost]
public ActionResult Save(string tableHtml)
{
    Session["TableStr"] = tableHtml;

    return new JsonResult() { Data = true };
}

また、コントローラへのパスが正しいことを確認してください。確信がある場合は、$.ajax代わりに呼び出し$.postを使用し、エラー コールバックを使用して、何が問題なのかを確認してください。

于 2012-06-18T14:42:16.213 に答える
0

I see a few things wrong with this.

  1. You are calling $("#Form").Submit()...., you have no element with the ID form. Try putting <form id="theForm"> and changing your call to $("#theForm").submit()...

  2. You are setting your tableStr variable when the page loads. Looking at your example, this is empty. Then, you call an Ajax actionlink to populate the div. However, you never update your tableStr variable again with the AJAX received content. You will be sending an empty string to the server once you get this to work.

  3. Why are you using a FORM element to do this? Forms are typically used to collect information from the user to submit to the server, which in this example, you are not collecting data, only sending the content of a div. You could have a button without the form to do the same thing and will grab whatever is in the "DivTable" element at the time of the button click:

Javascript

$(document).ready(function () {
    $("#myButton").click(function () {
       var tableStr = $("#divTable").html();
       $.ajax({           
          type: 'POST',
          dataType: 'json',
          url: '/Home/Save/', 
          data: { tableHtml: tableStr }, 
          success: function (data) {
             alert("Great success!");
           },
          error: function(data){
             alert('fail');
          }
       });
    });
  });

Controller

[HttpPost]
public ActionResult Save(string tableHtml)
{
    Session["TableStr"] = tableHtml;

    return new JsonResult() { Data = true };
}

HTML

<center><div id="divTable"></div></center>
<input type="button" id="myButton" value="Save some stuff"/>

4.Why is this necessary anyways? Looking at this code, you appear to be populating a list from an Ajax call to the server (Using the Ajax.ActionLink), then resubmitting that list back to the server to store in session? If that is right, just store the information in session when you call your Ajax link.

public ActionResult LoadUsers()
    {
        var UserInfoHtmlString = GetYourUserInfo();
        Session["TableStr"] = UserInfoHtmlString ;
        return UserInfoHtmlString;
    }
于 2012-06-18T18:26:01.827 に答える