0

サイト全体でクエリ文字列パラメーターを処理できる必要があります (たとえば、?promo=38 など)。ここで指定された手順Passing a {sitename} parameter to MVC controller actions を試していましたが、機能しませんでした。私の推測では、 http: //blog.stevensanderson.com/2007/11/20/aspnet-mvc-pipeline-lifecycle/によると、コントローラーがインスタンス化された後にクエリ文字列の処理が行われるためです。

では、私が望むことを達成するための簡単な方法は何でしょうか? つまり、すべてのコントローラー アクションで何かを手動で指定することなく、サイト内の任意の場所にあるクエリ文字列パラメーターから、ベース コントローラー プロパティの設定やセッション変数の設定などを行うことができますか?

4

1 に答える 1

3

@jrummell の提案に従ってOnActionExecuting()、ベース コントローラーまたはアクション フィルターをオーバーライドします。アクション フィルターが適しているかもしれませんが、それでもすべてのコントローラーをデコレートするか、ベース コントローラーを作成してそれでデコレートする必要があります。

public class PromoActionFilter : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        filterContext.Controller.ViewBag.Promo = filterContext.HttpContext.Request.QueryString("Promo");

        base.OnActionExecuting(filterContext);
    }
}

[PromoActionFilter]
public class BaseController : Controller
{
    ... Some Actions ...
}    
于 2013-04-01T19:57:08.573 に答える