gpt4 book ai didi

c# - Controller和View之间的抽象层

转载 作者:行者123 更新时间:2023-11-30 14:30:04 25 4
gpt4 key购买 nike

我正在尝试在我的 Controller 和我的 View 之间创建另一个层,以便我可以根据用户的“客户端 ID”(即他们所属的公司)将不同版本的 View 传递给用户。

我有以下代码:

public class HomeController : Controller
{
//
// GET: /Home/
public ActionResult Index()
{
// set client
var client = new Client();
client.Id = Guid.NewGuid();
client.Name = "Foo";

// set user
var user = new User();
user.Id = Guid.NewGuid();
user.ClientId = client.Id;
user.Name = "Foo";

return ViewRenderer.RenderView("AddComplete", client);
}
}

我的 ViewRenderer 类如下所示:

public static class ViewRenderer
{
public static ViewResult RenderView(string view, Guid clientId)
{
string viewName = GetViewForClient(view, clientId);
return Controller.View(view);
}

public static string GetViewForClient(string view, Guid clientId)
{
// todo: logic to return view specific to the company to which a user belongs...
}
}

问题是,RenderView(string view, Guid clientId) 中的 return Controller.View(view); 行给我错误:

System.Web.Mvc.Controller.View()' is inaccessible due to its protection level

我很想知道如何解决这个错误,或者是否有更好的方法来做我想做的事情,即显示不同版本的 View ,这些 View 特定于用户所在的各个公司属于。

编辑:另一个我在脑海中思考的选项......

有没有一种方法可以覆盖 View() 方法,以便我可以在它前面加上目录名称,例如,属于“Acme Co.”的用户。会调用与其他人相同的 Controller 操作,例如 View("MyView") 但该方法实际上会调用 View("AcmeCo/MyView") 但是,我不实际上并没有在我的 Controller 中编写该代码,它只是从用户的客户端 ID 属性派生而来。

最佳答案

您可以只替换 View 引擎而不是添加另一个抽象。

编写自己的 View 引擎(这里是如何从 RazorViewEngine 开始)

public class ByIdRazorViewEngine : RazorViewEngine
{
protected override IView CreateView(ControllerContext controllerContext,
string viewPath, string masterPath)
{
var id = // get something from controller context controllerContext
var newViewPath = CalculateViewPathFromId(id);

return base.CreateView(controllerContext, newViewPath, masterPath);
}

并在Global.asax.cs中注册:

protected void Application_Start()
{
ViewEngines.Engines.Clear();

ViewEngines.Engines.Add(new ByIdRazorViewEngine());
}

关于c# - Controller和View之间的抽象层,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24456309/

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