调用Mvc动作olny表单视图

时间:2015-02-22 20:47:23

标签: c# asp.net-mvc model-view-controller action-filter

我有以下情况。

我的控制器检查用户是否拥有适当的权限,然后重定向他正确的操作。

所有操作都有ChildActionOnly属性,因为这些操作不能直接通过URL调用。 (只有具有适当权限的用户才能调用调用操作)

每个操作都会返回带有特殊按钮的视图。此按钮可以调用关键操作。

在图片中我说明了(链接在下面)

http://s23.postimg.org/fmndgt5p7/mvc.jpg

我的问题是如何在点击特殊按钮后调用DeleteData Action?我不希望能够通过URL直接调用DeleteData Action,我不希望第二次检查用户权限。

2 个答案:

答案 0 :(得分:1)

  

我不希望能够通过网址直接调用DeleteData Action

那么,您想要将脑电波发送到服务器吗?服务器如何获取执行删除操作的消息?

  

我不想第二次检查用户权限。

事实是你正在再次往返服务器,所以你必须再次检查用户权限,至少如果你想要有任何安全措施。

MVC并没有提供任何魔力。它仍然依赖于无状态 HTTP协议来运行。所以它所做的一切都必须通过该协议进行通信。您可以通过AJAX获得花哨和拨打电话,因此没有太多的页面加载,但是与服务器的每次交互都必须对服务器进行完整的往返(请求和响应)。没有办法避免这种情况。

答案 1 :(得分:0)

听起来你已经隐藏了按钮,如果他们没有删除权限,但你需要在发出删除请求时再次检查权限,因为这将是一个新的请求。

删除操作应仅限于POST Why shouldn't data be modified on an HTTP GET request?

您需要通过仅响应POST的URL公开删除操作,并且需要再次验证权限,因为它是对服务器的新请求。

可以使用ajax请求或(Post / Redirect / Get)完成 http://en.wikipedia.org/wiki/Post/Redirect/Get

A(发布/重定向/获取)如下所示,可防止用户再次单击刷新并再次提交请求,并且不会在浏览器中显示历史记录。

[HttpPost]
public ActionResult DeleteSomething(int entityId){
    //Delete object then redirect back to original page
    return RedirectToAction("Index")
}