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)
    {

Post を廃止してActionResult、ベースコントローラーに1つだけ言ってもらいたいです。

これは可能ですか?

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 に答える