【发布时间】: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