MVC 3登录页面无法获取主题文件

时间:2012-01-16 09:54:41

标签: asp.net-mvc-3 razor

在我的MVC 3项目中,我有一个带有jquery + css文件的模板。在授权页面中没有问题我可以使用所有这些文件和模板。但是在登录页面中存在链接文件的问题。

文件结构如下:

  • MVC项目根目录
    • 资产
    • JS​​
    • CSS

在_Layout.cshtml中,链接是这样的:

<head>
    <title>@ViewBag.Title</title>
    <link href="@Url.Content("~/Content/Site.css")" rel="stylesheet" type="text/css" />
    <link href="@Url.Content("../../assets/css/main.css")" rel="Stylesheet" type="text/css" />
    <link href='http://fonts.googleapis.com/css?family=Cuprum' rel='stylesheet' type='text/css' />
    <link href="@Url.Content("~/Content/themes/base/jquery.ui.all.css")" rel="Stylesheet" type="text/css" />

    <script src="@Url.Content("~/Scripts/jquery-1.7.min.js")" type="text/javascript"></script>

    <script type="text/javascript" src="@Url.Content("../../assets/scripts/spinner/jquery.mousewheel.js")"></script>
    <script src="@Url.Content("../../assets/scripts/spinner/ui.spinner.js")" type="text/javascript"></script>


    <script type="text/javascript" src="@Url.Content("../../assets/scripts/fileManager/elfinder.min.js")"></script>

但是在萤火虫中我得到了这样的错误:

语法错误:localhost / Account / LogOn?ReturnUrl = / Scripts / jquery-1.7.min.js“

应用程序查找不同的路径。我该怎么办?

由于


在我的示例代码中,您可以看到我使用它:

<script src="@Url.Content("~/Scripts/jquery-1.7.min.js")" type="text/javascript"></script>

但没有希望。在firebug中我可以看到该页面试图从“/Account/LogOn?ReturnUrl=/Script/jquery.js”加载jquery.js。

3 个答案:

答案 0 :(得分:4)

您可以尝试添加路由以忽略javascript / css文件,因此在Global.asax的RegisterRoutes中,您可以添加以下内容:

routes.IgnoreRoute("{*js}", new { js = @".*\.js(/.*)?"});
routes.IgnoreRoute("{*css}", new { css = @".*\.css(/.*)?"});

但是,如果您使用内置身份验证并且具有类似于以下内容的授权节点:

<system.web>
    <authorization>
        <deny users="*"/>
    </authorization>
<system.web>

然后,.NET将自动拒绝对未经身份验证的用户映射到.NET的任何文件的请求。因此,您需要使用位置节点来允许访问脚本文件夹:

<location path="scripts">
    <system.web>
        <authorization>
            <allow users="*"/>
        </authorization>
    </system.web>
</location>

当您使用MVC时,在控制器操作上使用AuthorizeAttribute而不是在web.config中使用授权节点可能更容易。

答案 1 :(得分:1)

使用../..

替换href中的~

@Url.Content("...")内的所有网址都应以波浪号开头。

答案 2 :(得分:1)

您应该配置您的网络文件夹的安全性,添加

  

<强> IUSR

  

<强> IIS_IUSRS

并为其分配读取和执行权限。