C# 从一个ActionResult方法切换到另一个方法并每次触发ActionFilterAttribute的正确方法是什么?

C# 从一个ActionResult方法切换到另一个方法并每次触发ActionFilterAttribute的正确方法是什么?,c#,asp.net-mvc,custom-attributes,actionfilterattribute,C#,Asp.net Mvc,Custom Attributes,Actionfilterattribute,我试图在控制器中编写一些返回ActionResult的方法。每个方法都有一个属性,该属性应该在允许用户使用该方法之前运行一些验证逻辑。而在一种方法中,如果我检测到某种情况,我会尝试将数据传递给另一种方法来完成处理并返回ActionResult。我发现,在执行此操作时,输入第二个方法时,没有在第一个属性中进行验证。我想知道这是否是传递控件以生成ActionResult的错误方法,以及如何确保每次都命中属性。考虑下面的例子。 [SpecialActionFilterAttribute(Validat

我试图在控制器中编写一些返回ActionResult的方法。每个方法都有一个属性,该属性应该在允许用户使用该方法之前运行一些验证逻辑。而在一种方法中,如果我检测到某种情况,我会尝试将数据传递给另一种方法来完成处理并返回ActionResult。我发现,在执行此操作时,输入第二个方法时,没有在第一个属性中进行验证。我想知道这是否是传递控件以生成ActionResult的错误方法,以及如何确保每次都命中属性。考虑下面的例子。

[SpecialActionFilterAttribute(ValidationRequirement1)]
public ActionResult Index(int id, bool handleWithOtherMethod)
{
    MyViewModelType viewModel = this.ModelRepository.GetModel(id);

    if (handleWithOtherMethod)
    {
        return Index(viewModel);
    }
    Response.StatusCode = 200;
    return View(viewModel);
}

[SpecialActionFilterAttribute(ValidationRequirement2)]
public ActionResult Index(MyViewModelType viewModel)
{
    viewModel.SomeSpecialProperty = "Some special value";
    Response.StatusCode = 200;
    return View(viewModel);
}

当我尝试上面的代码时,似乎执行正确,但是从第一个ActionResult方法到第二个ActionResult方法时,没有输入属性中的代码。此切换的全部要点是在特定情况为真时,通过ActionFilterAttribute代码强制执行。这是坏形式吗?我的方法应该是什么?

中止!这不是一个好方法。

您需要
返回重定向操作(…)
@StephenMuecke
重定向操作
不“调用”另一个方法,它会触发完整的302重定向-听起来不像OP所寻找的。为什么要在两个方法中执行此操作?为什么不在单个操作中处理自定义验证步骤?@AlexeiLevenkov,是的,我知道,但触发filter属性是必需的。@StephenMuecke如何在调用RedirectToAction时传递视图模型?