C# 当我们要渲染视图时,幕后会发生什么?
ActionResult是MVC中要查看的各种返回类型的基类。因此,您的操作必须返回ActionResult或从中派生的类才能工作 所以我们可以使用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.
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只是将返回转换成字符串,然后直接通过管道将其作为响应发送给客户机。你得不到任何视图、模型等。