【问题标题】:MVC Calling ActionResult Method from JavaScriptMVC 从 JavaScript 调用 ActionResult 方法
【发布时间】:2013-09-04 08:01:23
【问题描述】:

我从视图上的 JavaScript 函数调用此 ActionResult 控制器方法。该函数运行良好,ActionResult 控制器方法运行良好,但它应该移动到不同视图的最后一行没有发生。我可以单步执行新视图上的代码行,但是在单步执行新视图上的代码行之后,仍会显示原始视图。 $.get() 调用的使用是否正确?或者我应该使用其他一些 jquery 方法来调用控制器。在这种情况下,我不需要从控制器返回任何内容,只需运行一些数据库代码并移动到新视图。

控制器:

        if (ModelState.IsValid)
        {
            System.Web.Security.MembershipUser user = Membership.GetUser();
            var job = (from j in db.Jobs where j.ID == id select j).First();
            job.DriverMembershipUserName = user.UserName.ToString();
            job.JobStatus = "Purchased";
            ViewBag.PurchaseMessage = "Thank you for purchasing this job.";
            db.Entry(job).State = EntityState.Modified;
            db.SaveChanges();

            return View("JobDetail", job);                
        }

来自原始视图页面的 JavaScript 调用:

var url = "/Job/PurchaseJobFinalize/" + JobID;
$.get(url, function () { });

【问题讨论】:

  • 您正在执行异步调用,它将返回的只是您呈现的 html。如果您希望它实际转到该“页面”,请改用链接。

标签: jquery asp.net-mvc


【解决方案1】:

考虑使用

@Html.ActionLink("PurchaseJobFinalize", "Job", new { JobID: JobID});

您现在使用的是对服务器的异步调用,它只会返回视图的渲染 html。

但是,您可以获取调用结果并将其放入 div,这样您就可以进入 SPA(单页应用程序)空间。

或者你可以试试这个

window.location = "/Job/PurchaseJobFinalize/" + JobID;

或者你可以试试

window.location.assign("/Job/PurchaseJobFinalize/" + JobID)

【讨论】:

  • 感谢您的建议。我的 $.get(url... 调用在一个成功函数中,所以我不能将它作为一个动作链接。我希望成功函数可以调用一个控制器方法,在控制器中运行一些代码,然后继续到下一个视图。
  • 你可以使用window.location = "/Job/PurchaseJobFinalize/" + JobID;
  • 好的,谢谢。我刚刚发现了这个,它似乎也可以工作,我想你上面的想法是一样的吗? location.href = url + "/" + JobID
猜你喜欢
  • 1970-01-01
  • 2017-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多