【问题标题】:getting the MVC Views folder path获取 MVC Views 文件夹路径
【发布时间】:2016-03-25 11:57:43
【问题描述】:

我有这个 angular 模块,并希望将我的 Index.cshtml 文件作为它的模板,如下所示:

angular.module('whatever', [whatever.Provider])
        .config([
            "whateverProvider", function(whateverProvider) {
                whateverProvider
                    .Sample('baseWidget', {
                        title: 'Base Widget',
                        templateUrl: "Views/Home/Index.cshtml", // 404
                        controller: "whateverController",
                    });
            }
        ])

我在我的索引页面中收到了这个 404 错误:

GET http://myLocalDomain/projectFolder/Views/Home/Index.cshtml 404 (Not Found)

所以基本上问题是如何获得Index.cshtml 路径?

【问题讨论】:

  • 直接指向网址是否可以在浏览器上查看html文件?如果没有,您可能需要更新您的 controller.cs 文件。
  • 我在http://myLocalDomain/projectFolder/Home/Index 获得了视图,但它是视图和布局。我只想得到那个Index.cshtml 部分路径
  • 哎呀,对不起,我的意思是如果你直接指向它,你能看到局部视图吗?

标签: angularjs asp.net-mvc routing


【解决方案1】:

客户端无法访问包含所有内容的 Views 文件夹,这是由于 Views 文件夹中的专用 web.config 文件具有 BlockViewHandler 处理程序:

 <system.webServer>
    <handlers>
      <remove name="BlockViewHandler"/>
      <add name="BlockViewHandler" path="*" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" />
    </handlers>
  </system.webServer>

cshtml 文件不应该直接从客户端使用,因为它们可能会暴露一些服务器端代码,这显然是一个安全问题。

因此,如果您想向客户发送一些模板,您有两种选择:

  1. 创建一个静态 html 文件并放入某个专用文件夹(类似于默认 MVC 模板中的 Content 文件夹)
  2. 创建一个控制器,它将渲染 cshtml 文件并将它们返回给客户端(这是一种更昂贵的方式,因为默认情况下静态文件由 IIS 直接提供,而不涉及 ASP.NET 管道)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-03
    • 2013-07-05
    • 1970-01-01
    • 1970-01-01
    • 2012-04-29
    • 2011-07-31
    相关资源
    最近更新 更多