5

我的控制器中有以下内容;

    public ActionResult CocktailLoungeBarAttendant()
    {
        return View();
    }

    [HttpPost]
    public ActionResult cocktailLoungebarattendant(string name, string email, string phone)
    {
        return View();
    }

    public ActionResult merchandisecoordinator()
    {
        return View();
    }

    [HttpPost]
    public ActionResult merchandisecoordinator(string name, string email, string phone)
    {
        return View();
    }

这只发生了 4 次,但让我感到困扰的是我将代码重复了 4 次。

然后我有一个 BaseController 来获取参数并处理它们;

    protected override void OnActionExecuting(ActionExecutingContext filterContext)
    {

我希望能够取消 PostActionResult并在基本控制器中使用一个。

这甚至可能吗?

4

1 回答 1

3

你可以做的是:在你的(基本)控制器中添加:

protected override void HandleUnknownAction(string actionName)
    {
        var controllerName = GetControllerName();
        var name = GetViewName(ControllerContext, string.Format("~/Views/{0}/{1}.cshtml",controllerName, actionName));
        if (name != null)
        {
            var result = new ViewResult
                            {
                                ViewName = name
                            };
            result.ExecuteResult(ControllerContext);
        }
        else
            base.HandleUnknownAction(actionName);
    }

    protected string GetViewName(ControllerContext context, params string[] names)
    {
        foreach (var name in names)
        {
            var result = ViewEngines.Engines.FindView(ControllerContext, name, null);
            if (result.View != null)
                return name;
        }
        return null;
    }

这将尝试检查未定义方法的视图是否存在。我认为您可以自己从这里扩展它以满足您的需求。

于 2012-04-19T07:30:54.213 回答