在asp.net mvc中使用ajax post将数据从JS传输到控制器中的函数.但观点并没有改变

Using ajax post to transfer data from JS to a function in Controller in asp.net mvc. But the view is not changed

本文关键字:控制器 传输 函数 改变 并没有 观点 JS 数据 mvc net asp      更新时间:2023-09-26

这是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");
    }

在调试程序时调用函数但不改变视图。

一个简单的方法,你可以把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>

我希望这能帮助你解决你的问题。

当你通过ajax点击控制器时,响应不会影响用户看到的页面,响应没有被处理,你需要在ajax代码中添加一个success:处理程序。但是,如果这个调用总是导致用户被转发到另一个页面,你不需要做ajax,你可以使用普通的mvc ActionLink,如下所示。

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

更新

我认为你必须像下面这样做,我不确定为什么成功没有被击中,但如果你使用complete,它是有效的,这需要研究。mvc控制器必须返回url, ajax响应处理程序需要重定向到该url。

根据Siva Gopal的答案 修正

控制器

[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;
        }
    });