MVC4中的Styles.Render

时间:2012-08-19 17:16:48

标签: c# asp.net-mvc razor asp.net-mvc-4

.NET MVC4项目中@Styles.Render如何运作?

我的意思是,在@Styles.Render("~/Content/css")调用哪个文件?

我的Content文件夹中没有名为“css”的文件或文件夹。

8 个答案:

答案 0 :(得分:448)

它正在调用特定包中包含的文件,该文件在BundleConfig文件夹的App_Start类中声明。

在该特定情况下,对@Styles.Render("~/Content/css")的调用称为“〜/ Content / site.css”。

bundles.Add(new StyleBundle("~/Content/css").Include("~/Content/site.css"));

答案 1 :(得分:34)

注意区分大小写。如果你有一个文件

  

/Content/bootstrap.css

然后将Bundle.config重定向到

  

.INCLUDE( “〜/内容/ Bootstrap.css”)

它不会加载CSS。

答案 2 :(得分:10)

派对有点晚了。但似乎没有人提到过 bundling& StyleBundle的{​​{3}},所以......

@Styles.Render("~/Content/css") 

拨打Application_Start()

BundleConfig.RegisterBundles(BundleTable.Bundles);            

反过来调用

public static void RegisterBundles(BundleCollection bundles)
{
    bundles.Add(new StyleBundle("~/Content/css").Include(
              "~/Content/bootstrap.css",
              "~/Content/Site.css"));
}

RegisterBundles()有效地结合了& 缩小 bootstrap.css& Site.css
到一个文件,

<link href="/Content/css?v=omEnf6XKhDfHpwdllcEwzSIFQajQQLOQweh_aX9VVWY1" rel="stylesheet">

<强>但是 ..

<system.web>
  <compilation debug="false" targetFramework="4.6.1" />
</system.web>

仅当<{strong} debug设置为false中的Web.config时。 否则bootstrap.css&amp; Site.css将单独提供 没有捆绑,也没有缩小:

<link href="/Content/bootstrap.css" rel="stylesheet">
<link href="/Content/Site.css" rel="stylesheet">

答案 3 :(得分:0)

src="@url.content("~/Folderpath/*.css")"应该呈现样式

答案 4 :(得分:0)

正如App_start.BundleConfig中所定义的那样,它只是在调用

bundles.Add(new StyleBundle("~/Content/css").Include("~/Content/site.css"));

即使删除该部分也没有任何反应。

答案 5 :(得分:0)

Polo我不会在MVC中使用Bundles有多种原因。它在您的情况下不起作用,因为您必须在Apps_Start文件夹中设置自定义BundleConfig类。当您可以在html的头部简单添加样式时,这没有任何意义:

<link rel="stylesheet" href="~/Content/bootstrap.css" />
<link rel="stylesheet" href="~/Content/bootstrap.theme.css" />

您还可以将这些添加到Layout.cshtml或从您的所有视图调用并放入每个页面的部分类。如果样式发生变化,您可以轻松更改名称和路径,而无需重新编译。

在类中添加CSS的硬编码链接打破了UI和设计与应用程序模型分离的全部目的。您也不希望在c#中管理硬编码样式表路径,因为您不能再为不同的设备,主题等构建“皮肤”或单独的样式模型,如下所示:

<link rel="stylesheet" href="~/UI/Skins/skin1/base.css" />
<link rel="stylesheet" href="~/UI/Skins/skin2/base.css" />

使用此系统和Razor,您现在可以从数据库或用户设置中切换皮肤路径,并通过动态更改路径来更改网站的整个设计。

15年前CSS的整个目的是为网站开发用户控制和应用程序控制的样式表“皮肤”,这样您就可以将UI外观与应用程序分开,并重新定位内容,而不是数据结构.....例如可打印版本,移动版,音频版,原始xml等

现在回到这个“老式”的硬编码路径系统,使用C#类,刚性样式(如Bootstrap),并将网站主题与应用程序代码合并,我们再次回归到如何构建网站1998年。

答案 6 :(得分:0)

我做了所有必要的事情以将捆绑添加到MVC 3网站(我是现有解决方案的新手)。 def count_dtype(dtype): """ dtype : datatype descr (list of strings / tuples, subdtypes rather than dtype object) Return total number of elements in array of dtype """ sum = 0 for name, t, *shape in dtype: if isinstance(t, str): ## base datatype if shape: sum += np.multiply.reduce(shape[0], dtype=np.int64) else: sum += 1 else: ## Subarray type sum += np.multiply.reduce(shape, dtype=np.int64)*count_dtype(t) return sum def _recarray2string(a, options, separator=' ', prefix=""): """ Create a string representation of a record array a : record array separator : used by _array2string prefix : used by _array2string """ options = np.get_printoptions() threshold = options['threshold'] edgeitems = options['edgeitems'] size = count_dtype(a.dtype.descr) items = np.multiply.reduce(a.shape) if size*items > threshold/(2*edgeitems): ## Too big if size > threshold: ## subtype is too large - how to handle? newopt = options.copy() newopt['threshold'] = options['threshold'] // (2*options['edgeitems']) def fmt_subtype(r): res = [] for sub in r: if sub.dtype.names is not None: res.append(fmt_subtype(sub)) else: res.append(_array2string(sub, newopt, separator=separator, prefix=prefix)) return separator.join(res) return separator.join(fmt_subtype(a[i]) for i in range(edgeitems)) + '\n...\n' + \ separator.join(fmt_subtype(a[a.shape[0]-i-1]) for i in range(edgeitems)) else: ## Subtype is small enough it's sufficient to truncate only sub-dtype options = options.copy() options['threshold'] = threshold // size return _array2string_old(a, options, separator=separator, prefix=prefix) else: ## Print as normal return _array2string_old(a, options, separator=separator, prefix=prefix) def _array2string(a, options , separator=' ', prefix=""): """ monkeypatched print function that allows truncating record arrays sensibly """ if a.dtype.names is not None: return _recarray2string(a, options, separator=separator, prefix=prefix) else: return _array2string_old(a, options, separator=separator, prefix=prefix) # Setup monkeypatching _array2string_old = np.core.arrayprint._array2string np.core.arrayprint._array2string = _array2string 对我不起作用。我终于发现我只是想念一个冒号。在母版页中:Styles.Render对于<%: Styles.Render("~/Content/Css") %>为什么在同一个页面上运行 没用冒号的原因,我仍然感到困惑。

答案 7 :(得分:0)

在您的web.config上将此设置为False

<compilation debug="false" targetFramework="4.6.1" />