创建常见的ActionResult

gri*_*egs 5 c# asp.net-mvc asp.net-mvc-2

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

    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();
    }
Run Code Online (Sandbox Code Playgroud)

这只发生了4次,但是我发现我的代码重复了4次.

然后我有一个BaseController然后抓取参数并用它们做东西;

    protected override void OnActionExecuting(ActionExecutingContext filterContext)
    {
Run Code Online (Sandbox Code Playgroud)

我希望能够取消Post ActionResult的功能并在基本控制器中有一个说.

这甚至可能吗?

ama*_*ers 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;
    }
Run Code Online (Sandbox Code Playgroud)

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