gpt4 book ai didi

c# - 在升级到 MVC 4 的网站上,添加 View 对话框始终默认为 ASPX

转载 作者:太空狗 更新时间:2023-10-30 01:21:40 24 4
gpt4 key购买 nike

(我一次性发布并回答了这个问题,因为我花了很长时间才弄明白这个问题 - 我希望它能帮助其他人)

更新 - 我也有 posted an issue on the Asp.Net MVC Codeplex Issues board如果您受此影响并且想投票解决问题。 MVC 工具的代码不是开源的,因此我们不能简单地提交拉取请求来进行非常简单的修复。

我们已经升级了一个大型 Web Forms 站点以包含 MVC 4,并且我们打算在可预见的 future 并行运行这两个部分(Webforms 代码库非常庞大,因此无法快速转换)。

对于 MVC 方面的事情,我们打算使用 Razor 作为我们的 View 。我们最初还将在区域下运行 MVC 代码,因为我们已经拥有一个复杂的专有路由引擎,可以为 Web 表单端重写 URL。

在项目文件和 web.config 中执行了正确的步骤后,我们已经能够很好地运行它,但是有一个小问题。

每当我们在加载项目后第一次执行“添加 View ”时,ASPX 始终是选定的 View 引擎。为避免混淆,我们确实需要将其默认设置为 Razor。

我看过How to make razor the default view engine in existing projectI'm upgraded my project to Razor view engine, but VS2010 still auto-generates WebForms ;我们在项目中确实有 Razor View - 所以它不能像在项目中至少有一个 Razor View 那么简单。

最佳答案

How to make razor the default view engine in existing project 上接受的答案只讲了一半的故事。

正如我在问题中所确定的那样 - 我们在项目中确实有 razor views - 但事实证明你需要在项目中有一个 ~/Views 文件夹才能启动这个逻辑。在我们的例子中,我们为所有 MVC 4+ 代码使用区域,因此我们没有费心创建 ~/Views 文件夹。

我在 Microsoft.VisualStudio.Web.Mvc.UserInterface.MvcAddViewDialog.Init 方法中反射(reflect)了 Asp.Net MVC VS 扩展的添加 View 对话框(我已经添加了我对这段代码)你会找到在对话框首次显示时选择默认 View 引擎的代码:

//find the project's Views folder
ProjectItem viewsFolder = MvcProjectUtil.GetViewsFolder(this.Project);
//if not found, or if a view engine is already cached then skip this
if (viewsFolder != null && string.IsNullOrWhiteSpace(viewEngineName))
{
//has razor views?
bool flag = false;
//has webforms views?
bool flag2 = false;
//scan all folders and files in the project, looking at all file extensions
//if .cshtml or .vbhtml are found, then flag==true
//if .aspx are found, then flag2 == true
//both can be true when this method returns.
this.GetViewTypes(viewsFolder.ProjectItems, ref flag, ref flag2);
//if there's at least one razor view, or if there are no webforms views
if (flag || !flag2)
{
//assign either C# or VB razor view type
viewEngineName = ((this.Project.Kind ==
"{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") ? "VBHTML" : "CSHTML");
}
}
//this'll get bound in the combo on the dialog
this.ViewEngineName = viewEngineName;

如您所见, View 类型的扫描仅在 ~/Views 文件夹中进行 - 它不会寻找区域。

我们所要做的就是添加一个空的 ~/Views 文件夹(尽管我们也为此复制了 Web.Config 以添加 404 处理程序)并在下一次重新加载项目,Razor 在下拉列表中被自动选中。这是因为,如上述 SO 的已接受答案中正确描述的那样,如果找到 Razor View 或在该文件夹中没有找到 webforms View ,则使用 Razor。

关于c# - 在升级到 MVC 4 的网站上,添加 View 对话框始终默认为 ASPX,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14873340/

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