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()控制器动作是通用的,所以我可以将它传递给任何模型,而无需在方法签名中强输入模型类,就像我在上面的示例中所做的那样。

我知道我可以通过为我拥有的每个模型重写一次 GetFile() 方法来实现这一点,但我想知道是否有更好的方法来做到这一点,尽可能保持干燥?

谢谢你。

4

1 回答 1

1

我建议使用基类:

public class BaseGetFileModel {}

各种模型将从中派生。

[HttpPost]
public FileContentResult GetFile(BaseGetFileModel model)

编辑:

好的,如果您想要一种通用的方法,那么您可以这样做:

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

您不接受任何模型参数,您只需从请求中获取 POST 的值。或者,如果您想避免硬编码键名,您可以遍历请求值集合。

于 2013-06-14T09:27:52.207 回答