Дарио - из-за использования этого для частичного просмотра у вас всегда будет проблема с тем, что раздел <head>
документа уже существует и поэтому не может быть изменен. Если вы хотите оставаться совместимым с WC3, то вам нужно будет добавить любые дополнительные CSS в раздел head через javascript. Это может или не может быть желательным (если вам нужно обслуживать браузеры downsteam с отключенным javascript).
Основная проблема, на которую вы можете ссылаться, это то, что вы не можете поместить <asp:contentplaceholders>
в свои частичные функции. это боль (хотя понятно, что ссылка на мастер-страницу слишком привязывает частичное к конкретной главной странице).
Для этого я создал небольшой вспомогательный метод, который выполняет базовую работу по автоматическому добавлению файла css в раздел head.
edit - (согласно предложению Ому) это хороший маленький дом на полпути:
// standard method - renders as defined in as(cp)x file
public static string Css(this HtmlHelper html, string path)
{
return html.Css(path, false);
}
// override - to allow javascript to put css in head
public static string Css(this HtmlHelper html, string path, bool renderAsAjax)
{
var filePath = VirtualPathUtility.ToAbsolute(path);
HttpContextBase context = html.ViewContext.HttpContext;
// don't add the file if it's already there
if (context.Items.Contains(filePath))
return "";
// otherwise, add it to the context and put on page
// this of course only works for items going in via the current
// request and by this method
context.Items.Add(filePath, filePath);
// js and css function strings
const string jsHead = "<script type='text/javascript'>";
const string jsFoot = "</script>";
const string jsFunctionStt = "$(function(){";
const string jsFunctionEnd = "});";
string linkText = string.Format("<link rel=\"stylesheet\" type=\"text/css\" href=\"{0}\"></link>", filePath);
string jsBody = string.Format("$('head').prepend('{0}');", linkText);
var sb = new StringBuilder();
if (renderAsAjax)
{
// join it all up now
sb.Append(jsHead);
sb.AppendFormat("\r\n\t");
sb.Append(jsFunctionStt);
sb.AppendFormat("\r\n\t\t");
sb.Append(jsBody);
sb.AppendFormat("\r\n\t");
sb.Append(jsFunctionEnd);
sb.AppendFormat("\r\n");
sb.Append(jsFoot);
}
else
{
sb.Append(linkText);
}
return sb.ToString();
}
использование:
<%=Html.Css("~/Content/yourstyle.Css")%>
или
<%=Html.Css("~/Content/yourstyle.Css", true)%> // or false if you want!!
стоит подойти, если все остальное не поможет. также возможно адаптировать приведенную выше логику для попадания в фильтр действий и добавления CSS к заголовкам ответов и т. д. вместо вывода строки js.