授权属性中断@ Script.Render

时间:2013-03-14 17:17:45

标签: asp.net-mvc-4 forms-authentication asp.net-4.5 bundling-and-minification

我有一个捆绑的ASP.Net MVC 4,.net 4.5项目。当我向控制器添加[授权]时,@ Scripts.Render和@ Styles.Render调用正在打破'对象引用未设置为对象的实例。'

我不能为我的生活找出原因!!

有没有人遇到过这个?有人可以帮忙吗?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Project.Models;
using Project.Repositories;

namespace Project.Controllers
{
    [Authorize]
    public class HomeController : Controller

这打破了我的_Layout观点:

@model PageModel
<!DOCTYPE html>
<!--[if lt IE 7]>      <html class="no-js lt-ie9 lt-ie8 lt-ie7"> <![endif]-->
<!--[if IE 7]>         <html class="no-js lt-ie9 lt-ie8"> <![endif]-->
<!--[if IE 8]>         <html class="no-js lt-ie9"> <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js"> <!--<![endif]-->
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">

    <title>Project</title>
    <meta name="description" content="">    
    <meta name='viewport' content='width=device-width, initial-scale=1.0, maximum-scale=1.0'/><meta name="apple-mobile-web-app-capable" content="yes" /> 
    <meta name="format-detection" content="telephone=no">


    @Styles.Render("~/Content/bootstrap")
    @Scripts.Render("~/bundles/jquery")        
    @Scripts.Render("~/bundles/initializr")        

4 个答案:

答案 0 :(得分:3)

我只想添加我的修复程序。我在最后一小时与它搏斗,终于意识到它是什么。就我而言,@Scripts.Render("~/my/script/bundle")包含一个JavaScript文件,其中包含一个简单的语法错误。而已。当我意识到它可能是什么时,我去查看了JavaScript文件,果然,有一条红色的波浪线给了我手指。

答案 1 :(得分:1)

是的,经过几个小时的讨论,看着各种不相关的地方,我已经解决了这个问题......

我的_Layout视图有一些其他razor调用正在查看较低的pagemodel属性,但是当我被重定向到登录进行身份验证时,pagemodel为null,这就是问题所在。

只记得那些人,Visual Studio正在打破的行并不总是与实际问题相符,特别是在剃须刀中,应该早点记住这个!在下一个声明中低头看。

答案 2 :(得分:1)

之前我经历过这个,我发现了自己的错误。问题出在这一行@Styles.Render("~/andia-agency/css")(_Layout)

在BundleConfig文件中

            bundles.Add(
            new ScriptBundle("~/andia-agency/css")
            .Include("~/Content/andia-agency/assets/bootstrap/css/bootstrap.min.css")
            .Include("~/Content/andia-agency/assets/prettyPhoto/css/prettyPhoto.css")
            .Include("~/Content/andia-agency/assets/css/flexslider.css")
            .Include("~/Content/andia-agency/assets/css/font-awesome.css")
            .Include("~/Content/andia-agency/assets/css/style.css"));

我将新ScriptBundle 更改为 StyleBundle 。这可能会解决您或他人的问题。

答案 3 :(得分:0)

我没有足够的声誉来评论Doga的回答,但是我也发生了同样的事情。我在HomeController中添加了[Authorize]属性,此后,@ Styles.Render和@ Scripts.Render也遇到了同样的问题。

我发现在_Layout的更深处,我正在访问ViewData中的一项并将其强制转换为bool,但这是空的。我对其进行了修复,以使其首先检查null,现在可以正常工作。