0

私はこのコントローラーを持っています

public class DownloadController : Controller
{
    [HttpPost]
    public FileContentResult GetFile(MyModel model)
    {
        // Action code
    }
}

そしてこのモデル

public class MyModel
{
    public string Test { get; set; }
}

ビューからコントローラーにモデルを渡すと、このようにうまく機能します

@using (Html.BeginForm("GetFile", "Download", FormMethod.Post))
{
    @Html.HiddenFor(m => m.Test)
    <button type="submit" name="submit" class="submit">Download</button>
}

モデルはコントローラーに正しく渡され、必要なことを実行できます。

今、私が達成しようとしているのは、このGetFile()コントローラー アクションをgenericにすることです。これにより、上記の例で行ったように、メソッド シグネチャでモデル クラスを強く入力することなく、任意のモデルを渡すことができます。

私が持っているモデルごとに GetFile() メソッドを1回オーバーライドすることでこれを達成できることはわかっていますが、これを行うためのより良い方法はありますか?

ありがとうございました。

4

1 に答える 1

1

基本クラスを使用することをお勧めします:

public class BaseGetFileModel {}

さまざまなモデルが派生します。

[HttpPost]
public FileContentResult GetFile(BaseGetFileModel model)

編集:

OK、これを行う一般的な方法が必要な場合は、次のようにすることができます。

[HttpPost]
public FileContentResult GetFile()
{
    var someValue = Request["SomeValue"];
}

モデルパラメータを受け入れず、リクエストから POST された値を取得するだけです。または、キー名のハードコーディングを避けたい場合は、リクエスト値のコレクションを反復処理することもできます。

于 2013-06-14T09:27:52.207 に答える