首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >ASP.NET MVC控制器方法必须返回ActionResult吗?

ASP.NET MVC控制器方法必须返回ActionResult吗?
EN

Stack Overflow用户
提问于 2009-06-20 21:01:43
回答 5查看 34.3K关注 0票数 58

作为控制器MVC的新手,我一直想知道ASP.NET方法的签名。在我见过的所有示例中,它们似乎总是返回ActionResult,即使它们实际上返回一个ViewResult实例或类似的实例。

下面是一个常见的例子:

代码语言:javascript
复制
public ActionResult Index()
{
    return this.View();
}

在这种情况下,将方法声明为public ViewResult Index()并获得更强的类型支持不是更有意义吗?

实验表明,这是可行的,因此它似乎是可能的。

我确实意识到在某些情况下可能需要多态性(例如,如果您只想在某些情况下重定向,但在其他情况下显示视图),但如果该方法总是返回视图,我会发现ViewResult更可取。

就将来的兼容性而言,ActionResult显然提供了更健壮的签名,但如果控制整个代码库,那么如果将来需要的话,总是可以将方法的签名更改为更通用的返回类型。

是否还有其他我不知道的注意事项,或者我是否应该继续并使用特定的返回类型来声明我的控制器方法?

EN

回答 5

Stack Overflow用户

发布于 2009-06-20 13:18:22

始终返回您可以返回的最准确的类型。因此,当操作总是显示视图时,您应该返回一个ViewResult。我只会在某些情况下(无效的提交数据)在ViewResult中返回时才使用ActionResult,或者在其他情况下使用RedirectToRouteResult。

使用一些高级的操作过滤器/执行场景,你甚至可以返回与ActionResult无关的完全不同的东西。

票数 13
EN

Stack Overflow用户

发布于 2009-06-20 21:13:07

部分答案:你并不总是返回ActionResult,不。下面是您可以返回的其他一些结果的快速视图:http://msdn.microsoft.com/en-us/library/dd410269%28v=vs.98%29.aspx

也许这会有一点帮助。祝好运!

票数 8
EN

Stack Overflow用户

发布于 2009-06-20 13:40:42

是的,您可以像这样定义您的操作:public ViewResult Index()。但有时您的操作可能会返回不同的结果(不将结果声明为ActionResult基类是不可能的)。例如:

代码语言:javascript
复制
public ActionResult Show()
{
    ...

    if(Request.IsAjaxRequest())
    {
        return PartialView(...);
    }

    return View(...);
}

或者:

代码语言:javascript
复制
public ActionResult Show()
{
    ...

    try
    {
        ...
    }
    catch(Exception)
    {
        return RedirectToAction(...);
    }

    return View(...);
}
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1021568

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档