创建常见的ActionResult

时间:2012-04-19 03:45:31

标签: 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();
    }

这只发生了4次,但是我错误地认为我的代码重复了4次。

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

    protected override void OnActionExecuting(ActionExecutingContext filterContext)
    {

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

这甚至可能吗?

1 个答案:

答案 0 :(得分: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;
    }

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