C# 通过ActionFilterAttribute mvc3.net处理多表单提交
我试图通过编写ActionFilter来处理多个表单提交。我是ActionFilters领域的新手,不知道从哪里开始。我非常感谢您的帮助。 我看了这个问题,但没有一个起点 我将解释如何创建一个属性,该属性允许您根据启动提交的提交按钮的名称切换目标操作C# 通过ActionFilterAttribute mvc3.net处理多表单提交,c#,asp.net,asp.net-mvc,asp.net-mvc-3,C#,Asp.net,Asp.net Mvc,Asp.net Mvc 3,我试图通过编写ActionFilter来处理多个表单提交。我是ActionFilters领域的新手,不知道从哪里开始。我非常感谢您的帮助。 我看了这个问题,但没有一个起点 我将解释如何创建一个属性,该属性允许您根据启动提交的提交按钮的名称切换目标操作 如果您需要指针,请告诉我我会为此使用防伪令牌。您应该已经生成了它(如果您不想受到CSRF攻击),并且它对于生成的每个表单都是唯一的。。因此,您可以创建一个过滤器,它基本上可以执行以下操作: 查找表格集合中的防伪令牌 查看会话[“LastFormT
如果您需要指针,请告诉我我会为此使用防伪令牌。您应该已经生成了它(如果您不想受到CSRF攻击),并且它对于生成的每个表单都是唯一的。。因此,您可以创建一个过滤器,它基本上可以执行以下操作:
我想提出一个答案。 这是密码
public class ValidateSubmitOnceTokenAttribute : ActionFilterAttribute
{
public String ErrorView { get; set; }
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
String submitOnceToken = null;
submitOnceToken = filterContext.HttpContext.Request[ViewHelper.SubmitOnceIdentifier];
if ((bool)filterContext.HttpContext.Session[ViewHelper.SubmitOnceIdentifier + submitOnceToken])
{
if (String.IsNullOrEmpty(View))
{
filterContext.Result = new EmptyResult();
}
else
{
ViewResult newView = new ViewResult();
newView.ViewName = ErrorView;
filterContext.Result = newView;
}
}
else
{
filterContext.HttpContext.Session[ViewHelper.SubmitOnceIdentifier + submitOnceToken] = true;
}
}
}
public partial class ViewHelper
{
internal const string SubmitOnceIdentifier = "_SUBMIT_ONCE_";
public static MvcHtmlString SubmitOnceToken()
{
Guid submitOnceToken = Guid.NewGuid();
HttpContext.Current.Session[SubmitOnceIdentifier + submitOnceToken] = false;
return new MvcHtmlString("<input type=\"hidden\" name=\"" + SubmitOnceIdentifier + "\" value=\"" + submitOnceToken.ToString() + "\">");
}
}
并将此包含在您的视图中
@ViewHelper.SubmitOnceOnlyToken()
此回答使用Aliostad描述的技术,但使用动作过滤器实现。tnx用于回答,但这不是我需要的。我有一个带有单个提交按钮的表单,但有时由于服务器响应缓慢,用户多次单击按钮,表单被提交多次
@ViewHelper.SubmitOnceOnlyToken()