0
の一つのパラメータをバインドしないでください。 idを呼び出してモデルをデータベースから取得します。は、私はこのようになります行動をしたアクション
のActionFilterは次のようになります。
...
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
// parse the id from the request
MyModel model = getModelFromDataStoreById(id);
filterContext.ActionParameters["model"] = model;
}
...
問題がmymodelというオブジェクトがパラメータなしのコンストラクタを持っていないことである、とのActionFilterがさえ呼ばれる前に、MVCの作成とmymodelというオブジェクトにバインドしようとしていますMyModelオブジェクトをインスタンス化できないため、例外がスローされます。
私の最初の質問は、私がこれを正しくやっているか、HttpContext.Itemsのようなものを使ってフィルタとアクションの間でデータをやりとりするべきでしょうか?次に、MVCにMyModelオブジェクトをバインドしようとしないように指示する方法はありますか?それは後で作成されるからです。
MyModelオブジェクトをバインドしたくない場合thodが呼び出されたら、なぜあなたはそれをパラメータリストに入れていますか?また、カスタムアクションフィルタに精通していますか?アクションのモデルにアクセスして、途中または途中でアクションモデルを作成できます。 – mccow002
ActionParameters経由でActionFilterからControllerにオブジェクトを渡すことを選択しました。それは私にとって最も簡潔で読みやすい解決策のようです。モデルオブジェクトはアクションのモデルではありません。私のビジネスロジックオブジェクトは、私がJSONResultを返してからアクションを実行します。 – Evan
なぜ、アクション自体でアクションフィルタで実行されているロジックを実行できないのですか?アクションフィルターは、さまざまなアクションで実行する必要のあるコードがある場合に使用されます。 DRYプリンシパルを実行するのに役立ちます。しかし、あなたの場合、これはこの1つの動作に固有のように見えます。では、アクション内でgetModelFromDataStoreByIdメソッドを呼び出すだけではどうですか? – mccow002