gpt4 book ai didi

asp.net-mvc - 如何继承 ASP.NET MVC Controller 并仅更改 View ?

转载 作者:行者123 更新时间:2023-12-02 02:01:06 27 4
gpt4 key购买 nike

我有一个从基本 Controller 继承的 Controller ,我想知道如何利用基本 Controller 的所有逻辑,但返回与基本 Controller 使用的不同的 View 。

基本 Controller 填充模型对象并将该模型对象传递到其 View ,但我不确定如何在子 Controller 中访问该模型对象,以便将其传递到子 Controller 的 View 。

最佳答案

几点。如果您知道这就是要返回的全部内容,则可以将返回值键入为 ViewResult。然后您可以从重写的实现中询问该值。更重要的是,根据 MVC v1 源代码,调用 View(object) 只需在 Controller 上设置 ViewData.Model,然后构造一个 ViewResult。

Controller .cs:440

protected internal ViewResult View(object model) {
return View(null /* viewName */, null /* masterName */, model);
}

Controller .cs:456

protected internal virtual ViewResult View(string viewName, string masterName, object model) {
if (model != null) {
ViewData.Model = model;
}

return new ViewResult {
ViewName = viewName,
MasterName = masterName,
ViewData = ViewData,
TempData = TempData
};
}

所以您需要做的就是调用基本方法并调用 View(string)。

namespace BaseControllers
{
public class CoolController
{
public virtual ViewResult Get()
{
var awesomeModel = new object();
return View(awesomeModel);
}
}
}

public class CoolController : BaseControllers.CoolController
{
public override ViewResult Get()
{
var ignoredResult = base.Get();
// ViewData.Model now refers to awesomeModel
return View("NotGet");
}
}

当然,您会浪费 CPU 周期来构造您忽略的 ViewResult。因此,您可以这样做:

public class CoolController : BaseControllers.CoolController
{
public override ViewResult Get()
{
var baseResult = base.Get();
baseResult.ViewName = "NotGet";
return baseResult;
}
}

如果您的基本 Controller 返回 ActionResult,则必须在更改 ViewName 之前将其强制转换为 ViewResult。

关于asp.net-mvc - 如何继承 ASP.NET MVC Controller 并仅更改 View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1567084/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com