1

これは、データを転送するための JS ファイルのコードです。

          var requestData = {
                lati: latitude,
                longi: longitude
            };

            $.ajax({
                url: '/User/populate_place',
                type: 'POST',
                data: requestData,
                dataType: 'json'
            });

これはコントローラーの私の関数です。

    [HttpPost]
    public ActionResult populate_place(string lati, string longi)
    {
        list_placesModels list_place = new list_placesModels();
        list_place.Latitude = lati;
        list_place.Longitude = longi;

        return RedirectToAction("About", "Home");
    }

プログラムのデバッグ中に関数が呼び出されますが、ビューは変更されません。まだ昔の景色を見せてくれます。

4

2 に答える 2

3

簡単な方法の1つは、次のようなアクションメソッドを使用して、URLをクライアントに渡して自分で処理できるようにすることです。

[HttpPost]
        public ActionResult MyRedirectAction()
        {
            ViewBag.Message = "Your contact page.";
            return Json(Url.Action("About", "Home")); //You can find how i am returing the url 
                                                      // for 'About' action of 'HomeController' so that 
                                                      // it will return the corresponding view.
        }
public ActionResult About()
        {
            ViewBag.Message = "Your app description page.";

            return View();
        }

これで、ビュースクリプト(Jqueryの場合もあります)で、次のようにリダイレクトできます。

<input type="button" id="btnRedirectToAbout" value="Redirect To About" />

<script src="../../Scripts/jquery-1.7.1-vsdoc.js" type="text/javascript"></script>
<script src="../../Scripts/jquery-1.7.1.js" type="text/javascript"></script>
<script type="text/javascript">
    $("#btnRedirectToAbout").click(function () {
        $.post('@Url.Action("MyRedirectAction","Home")', function (data) {
            document.location = data;
        });
    });
</script>

これが問題の解決に役立つことを願っています。

于 2013-03-07T15:02:02.963 に答える
1

ajaxを介してコントローラーを押すと、応答はユーザーに表示されるページに影響を与えないため、応答は処理されません。ajaxコードにsuccess:ハンドラーを追加する必要があります。ただし、この呼び出しによってユーザーが常に別のページに転送される場合は、ajaxを実行する必要はありません。以下のように、通常のmvcActionLinkを使用できます。

@Html.ActionLink("Link text", "populate_place", "user", new {lati = latiValue, longi = longiValue}, null)

アップデート

以下のようなことをしなければならないと思います。なぜ成功が得られないのかはわかりませんが、completeを使用すれば機能するので、調査する必要があります。mvcコントローラーはURLを返す必要があり、ajax応答ハンドラーはそのURLにリダイレクトする必要があります。

SivaGopalの回答に基づいて修正

コントローラ

[HttpPost]
    public string populate_place(string lati, string longi)
    {
        return Url.Action("About", "Home").ToString();
    }

Javascript

    $.ajax({
        url: '/Home/populate_place',
        type: 'POST',
        data: requestData,
        dataType: 'json',
        complete: function (data) {
            document.location = data.responseText;
        }
    });
于 2013-03-07T13:30:19.033 に答える