如何动态地更改MVC.NET控制器的返回类型

18 浏览
0 Comments

如何动态地更改MVC.NET控制器的返回类型

如何决定是使用ActionResult还是ViewResult?我知道ActionResult是一个抽象类,而ViewResult是其子类型,但我看到有些示例同时使用这两个类来实现相同的功能。它们之间有什么区别吗?

0
0 Comments

问题的出现原因是:

在MVC.NET控制器中,如果使用ViewResult来返回结果,那么只能返回视图页面。但是如果将返回类型标记为ActionResult,则可以返回多种类型的结果,例如视图页面、部分视图页面、JSON数据、JavaScript脚本等等。因此,为了实现代码的抽象化,将返回类型标记为ActionResult是一个更好的选择。

解决方法如下:

在控制器中将返回类型标记为ActionResult,然后根据需要,可以返回不同类型的结果。例如,可以使用return View()来返回视图页面,使用return PartialView()来返回部分视图页面,使用return Json()来返回JSON数据,使用return JavaScript()来返回JavaScript脚本,还可以使用return RedirectToAction()来重定向到另一个操作等等。通过使用ActionResult作为返回类型,可以更灵活地控制返回的结果类型,提高代码的可复用性和可扩展性。

有关ActionResult的更多信息,请参考以下链接:link

0
0 Comments

根据给定的内容,我们可以整理出问题的原因和解决方法。

问题的原因是:在MVC.NET控制器中,当设置Action的返回类型为ActionResult时,可以返回任何ActionResult的子类型,如Json、PartialView、View、RedirectToAction等。但是,当使用子类型ViewResult时,限制了Action只能返回View作为结果。

解决方法是:如果确保Action方法将返回某个视图页面,可以使用ViewResult。但是,如果Action方法可能具有不同的行为,比如渲染视图或执行重定向操作,可以使用更通用的基类ActionResult作为返回类型。

根据给定内容整理的文章如下:

ActionResult是基类类型,而ViewResult是ActionResult的子类型。

当你将Action的返回类型设置为ActionResult时,可以返回它的任何子类型,例如Json、PartialView、View、RedirectToAction等。

但是,当你在这种情况下使用子类型ViewResult时,你限制了你的Action只能返回View作为结果。

当你使用ActionResult作为返回类型时,你可以从Action返回以下内容(这意味着以下是ActionResult的子类型),如forums.asp.net上解释的:

ActionResult是一个通用的结果类型,可以有几个子类型(来自《ASP.NET MVC 1.0快速入门》书):

a) ViewResult

将指定的视图呈现到响应流中

b) PartialViewResult

将指定的部分视图呈现到响应流中

c) EmptyResult

基本上不做任何事情;给出一个空响应

d) RedirectResult

执行HTTP重定向到指定的URL

e) RedirectToRouteResult

执行HTTP重定向到由路由引擎根据给定的路由数据确定的URL

f) JsonResult

将给定的ViewData对象序列化为JSON格式

g) JavaScriptResult

返回可在客户端上执行的一段JavaScript代码

h) ContentResult

在不需要视图的情况下向响应流中写入内容

i) FileContentResult

将文件返回给客户端

j) FileStreamResult

将文件返回给客户端,该文件由Stream提供

k) FilePathResult

将文件返回给客户端

什么时候使用ViewResult:

如果你确定你的Action方法将返回某个视图页面,你可以使用ViewResult。但是,如果你的Action方法可能具有不同的行为,比如渲染视图或执行重定向操作,你可以使用更通用的基类ActionResult作为返回类型。

更多详情请参考:

http://forums.asp.net/t/1448398.aspx

也可以参考这里:

http://www.slideshare.net/umarali1981/difference-between-action-result-and-viewresult

没有意识到有这么多返回类型!Jazakallah,目前在asp.net mvc 5中,更完整的列表在MSDN - ActionResult Class中可以找到。

嗨,我是编程新手,在这里为什么要限制,为什么不只使用actionresult而不是viewresult?这只是出于安全原因,程序泄漏原因吗?

也可以使用ActionResult,这不会有任何问题。

0
0 Comments

ActionResult和ViewResult是MVC中一个方法的返回类型。

ActionResult可以返回任何类型的结果,而ViewResult只能返回View类型的结果。

ActionResult是一个抽象类,它有很多派生类,如ViewResult、RedirectResult、JsonResult等等,它可以返回不同类型的结果。

ViewResult是ActionResult的一个派生类,它只能返回View类型的结果。

在MVC开发中,我们通常会使用ViewResult作为返回类型,因为它可以直接返回一个视图给用户。

但有时候,我们可能需要动态地改变返回类型,这样可以根据实际情况返回不同类型的结果。

那么,如何动态地改变返回类型呢?

在MVC.NET控制器中,我们可以通过重写Controller类的ExecuteCore方法来实现动态改变返回类型的功能。

具体步骤如下:

1. 创建一个自定义的控制器类,继承自Controller类。

2. 在自定义控制器类中重写ExecuteCore方法。

3. 在ExecuteCore方法中根据实际情况动态地改变返回类型。

4. 在控制器的Action方法中调用自定义控制器的ExecuteCore方法。

下面是一个示例代码:

public class CustomController : Controller
{
    protected override void ExecuteCore()
    {
        // 根据实际情况动态地改变返回类型
        if (条件1)
        {
            // 返回View类型的结果
            View();
        }
        else if (条件2)
        {
            // 返回Redirect类型的结果
            Redirect();
        }
        else if (条件3)
        {
            // 返回Json类型的结果
            Json();
        }
        else
        {
            // 返回其他类型的结果
            // ...
        }
    }
}
public class HomeController : CustomController
{
    public ActionResult Index()
    {
        // 调用自定义控制器的ExecuteCore方法
        ExecuteCore();
    }
}

通过以上步骤,我们可以实现在MVC.NET控制器中动态地改变返回类型的功能。这样,我们就可以根据实际情况返回不同类型的结果给用户,提升了代码的灵活性和复用性。

0