Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 当我们要渲染视图时,幕后会发生什么?_C#_Asp.net Mvc - Fatal编程技术网

C# 当我们要渲染视图时,幕后会发生什么?

C# 当我们要渲染视图时,幕后会发生什么?,c#,asp.net-mvc,C#,Asp.net Mvc,ActionResult是MVC中要查看的各种返回类型的基类。因此,您的操作必须返回ActionResult或从中派生的类才能工作 所以我们可以使用 public ContentResult Index() { return Content("Hello world"); } 比如说 public ViewResult Index() { return View(); } 或行动结果 public ActionResult Index() { if (ViewBag.

ActionResult是MVC中要查看的各种返回类型的基类。因此,您的操作必须返回ActionResult或从中派生的类才能工作

所以我们可以使用

public ContentResult Index()
{
    return Content("Hello world");
}
比如说

public ViewResult Index()
{
    return View();
}
或行动结果

public ActionResult Index()
{
    if (ViewBag.Hello = "World")
        return Json("");
    return PartialView();
}
但也可以使用字符串

public string Index()
{
    return "Hello World";
}
为什么不可能返回整数来查看?(或许是吧?)

并且不可能返回某个实体来查看(或者可能是?)


我的问题是:当我们想要呈现视图时,幕后会发生什么?

我同意这是一个相当广泛的问题,但我想解决并回答您在问题中提出的一些问题

您可以从操作方法返回
int
string
对象
,它只会返回对象的字符串表示形式作为结果

因此,您不必返回类型为
ActionResult
的对象才能使其工作,但是
ActionResult
通过其各种实现启用了有用的功能,因此ASP.NET MVC框架可以直接处理不同的场景

例如,返回视图并处理要传递给视图的ViewModel:

return View(); // Default view without view model
return View(viewModelObject); // Default view with a view model
基于路由信息返回视图:

return View("viewName", viewModelObject);
return RedirectToAction(actionName, controllerName);
使用路由信息执行重定向到其他页面:

return View("viewName", viewModelObject);
return RedirectToAction(actionName, controllerName);
返回带有特定状态代码的页面:

return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
返回JSON而不是视图:

return JsonResult(myObject);
上面所有的例子都做了不同的事情,返回不同类型的结果,并为您处理对象,这样您就不必自己编写行为代码——它们已经准备好供您使用了

另一件方便的事情是,您可以创建自己的
ActionResult
实现来创建自己的行为,因此在这方面非常灵活


我同意
@Daniel J.G.
的观点,你应该多读一些关于ASP.NET MVC是如何结合在一起的,这对你来说会变得更加清晰。

我认为这个问题太宽泛了,无法给出正确的答案。您可以从查看开始。您的问题“为什么不可能返回要查看的整数?(或者可能是?”)和“不可能返回要查看的实体(或者可能是?”)是什么意思?你试过了吗?结果如何?“当我们要渲染视图时,幕后发生了什么?”这一点太宽泛了。是否可以在不使用ActionResult类型的情况下传递ViewModel进行查看?否。返回字符串、int等内容在功能上与返回
内容(someString)
相同。MVC只是将返回转换成字符串,然后直接通过管道将其作为响应发送给客户机。你得不到任何视图、模型等。