2

ユーザーが呼び出したアクションの履歴を作成しています。このためには、元のクエリ文字列のすべてのパラメーターが必要です。一部の説明情報は filterAction.Result.Model.MyDescription に保存されるため、これは OnActionExecuted (アクションの後) で実行する必要があります。

ActionExecutedContext では、ActionParameters にアクセスできず、RoutesValues にはアクション、コントローラー、ID、およびカルチャのみが含まれます。クエリ文字列に含まれていた他のパラメーターは含まれていません。

OnActionExecuting から OnActionExecuted までの ActionParameters を保持するにはどうすればよいですか?

コントローラ:

[ReportHistoryLink]
public ActionResult Index(int id, DateTime at, string by)
{
    var model = new ReportModel();
    model.ReportDescription = "Some logic get the ReportDescription";
    return View("Index", model);
}

アクションフィルター:

public class ReportHistoryLinkAttribute : ActionFilterAttribute
{
    public override void OnActionExecuted(ActionExecutedContext filterContext)
    {
        var model = (IModelWithReportDescription)((ViewResult)filterContext.Result).Model;
        var description = model.ReportDescription;

        var boxedId = filterContext.RouteData.Values["id"];
        var id = Convert.ToInt32(boxedId);
        if (id != 0 && !string.IsNullOrWhiteSpace(targetDescription))
        {
            var link = new HistoryLink
            {
                Id = id,
                Description = description,
                Route = filterContext.RouteData.Values  //This doesn't contains the "at and by parameters"
            };
        }
    }
}
4

1 に答える 1

3

使用できます

filterContext.HttpContext.Request.QueryString["id"]
于 2013-09-19T23:39:44.197 に答える