【问题标题】:Is it better to return a view from a controller action, or to use ajax requests and redirect to a url?从控制器操作返回视图,还是使用 ajax 请求并重定向到 url 更好?
【发布时间】:2017-07-05 13:43:45
【问题描述】:

我目前正在使用 C# 和 MVC 框架开发一个 Web 应用程序,我偶然发现了一个有趣的问题。

我正在编写一些服务器端验证程序,发现我需要向控制器发出 ajax 请求,让该控制器返回一个 URL,然后使用 javascript 重定向到该 URL。在这种特殊情况下,这是需要的,因为我在局部视图(模态框内)中进行模型验证。

我的问题是:从控制器返回视图更好吗(Actionresult/Viewresult)?

Controller.cs

[HttpPost]
public ActionResult AddLeverancier(Leverancier leverancier)
{

   return RedirectToAction("Index");
}

或从 Javascript 重定向到 URL?

Controller.cs

[HttpPost]
public ActionResult DeleteAllLeveranciers()
{

    return Json(Url.Action("Index", "Leverancier"));
}

javascript.js

        self.baseManager.DoAjaxRequest("POST", self.baseURL + "/DeleteAllLeveranciers", null, function (data) {
        window.location.href = data;
        self.baseManager.HideModal("deleteAllLeveranciersModal");
    });

是否存在与此相关的风险/性能问题?有什么明显的不同吗?

提前谢谢你,

米克

【问题讨论】:

  • 如果您将重定向推迟到 javascript,那么这意味着您依赖用户的浏览器进行重定向。这也意味着您可以让用户徒手“操纵”生成的 url。当您返回视图时,您已经发送了一个结果,而无需让用户控制它。
  • 在 AJAX 请求之后重定向完全违背了 AJAX 的意义。只需在那时做一个普通形式的 POST 并扔掉 AJAX。就视图与重定向而言,这不是非此即彼的情况。有时会同时使用两者,而您不能真正将一个用于另一个。所有这一切归结为简单地正确构建应用程序。
  • @ChrisPratt 这甚至不是真的。它可用于在重新加载页面之前对返回的数据执行某些操作,或者通过在不关闭模式窗口的情况下发布表单来处理模式表单。通过这样做,您可以验证服务器端验证是否在不关闭模式的情况下顺利通过,如果服务器端验证成功,您可以重新加载页面。

标签: javascript c# ajax asp.net-mvc controller


【解决方案1】:

这完全取决于您希望在客户端有多流畅。

ASP.NET MVC 中,我个人喜欢对 HttpPost 使用完整的回发>,因为我喜欢用于单元测试和集成测试的强类型服务器端语言。对嵌入在 html 中的 JavaScript 进行单元测试并不容易。 (如果我使用 Angular,情况就完全不同了。)

对于不需要任何验证的简单HttpGet,我喜欢使用Ajax。

【讨论】:

    猜你喜欢
    • 2011-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-19
    • 2011-03-20
    • 1970-01-01
    相关资源
    最近更新 更多