ASP.NET MVC - выполнение кода каждый раз, когда обрабатывается Site.Master - PullRequest
1 голос
/ 09 февраля 2009

Я бы хотел добавить небольшую изменчивость пути моей ссылки CSS каждый раз, когда обрабатывается мой вид Site.Master. Как правильно это сделать? Мой код в настоящее время ломается на Default.aspx, говоря, что я не определил cssLink. Site.Master код ниже:

    <script runat="server">
        void Page_Load(object sender, EventArgs e)
        {

            string cssLoc = "../../Content/css/expect.css?t=" + DateTime.Now.Ticks.ToString();
            string cssLink = String.Format(@"<link rel=""stylesheet"" type=""text/css"" href=""{0}"" />", cssLoc);
        }
    </script>

    <!DOCTYPE html>
    <html>
    <head id="Head1" runat="server">   
        <asp:ContentPlaceHolder ID="head" runat="server">
        <title></title>
        </asp:ContentPlaceHolder>    
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
        <%= cssLink %>
        <script type="text/javascript" src="../../Scripts/jquery.js"></script>
    </head>

Кроме того, есть ли способ исправить сообщение "XHTML переходный, заголовок встречается слишком мало раз"?

UPDATE:
Пожалуйста, игнорируйте проблему с ограничениями. Смотрите ответ Ричарда. Однако я должен отметить, что устранение этой проблемы не решает проблему.
Я думаю, что из-за объявления Inherits = "System.Web.Mvc.ViewMasterPage" вся
<script runat="server"> блок не обрабатывается.

Ответы [ 4 ]

5 голосов
/ 09 февраля 2009

Просто определите свою ссылку CSS, как вы это обычно делаете, и добавьте некоторую встроенную обработку. Вы пытаетесь создать Page_Load в представлении MVC, которое не является работоспособным решением ...

<link href="../../Content/css/expect.css?t=<%=DateTime.Now()%>" type="text/css" rel="Stylesheet" />
2 голосов
/ 09 февраля 2009

Подумайте о том, чтобы написать помощника для ссылки на этот файл CSS.

public static string DatedStylesheet(this HtmlHelper Html, string url, DateTime date)
{
    UrlHelper Url = new UrlHelper(new RequestContext(Html.ViewContext.HttpContext, Html.ViewContext.RouteData));
    string html = "<link type=\"text/css\" rel=\"stylesheet\" href=\"{0}?t={1}\"/>";

    return string.Format(html, Url.Content(url), date.Ticks.ToString());
}

<%= Html.DatedStylesheet("~/Content/css/expect.css", DateTime.Now);

Кто-нибудь знает более понятный способ использовать UrlHelper вне страницы просмотра? *1003*

2 голосов
/ 09 февраля 2009
<head runat="server">
      <title>Some Title</title> -- WILL FIX YOUR ISSUE
      ...
      <%= Helper.CustomStyle() %>
      ...
</head>

Этот Helper.CustomStyle будет иметь внутреннюю логику, которая меняется в зависимости от вызова DateTime.Now, как показано выше.

Очень хороший учебник, который поможет вам разобраться в пользовательских помощниках, можно найти здесь: http://www.asp.net/learn/mvc/tutorial-09-cs.aspx

ПОМНИТЕ - ASP.NET MVC устраняет вызовы типа Page_Load. Это отличный дизайн!

2 голосов
/ 09 февраля 2009

Вы объявили cssLink как локальную переменную в Page_Load. Как таковой, он не будет доступен для вашей страницы.

Это должно решить проблему для вас:

<script runat="server">
    private string cssLoc;
    private string cssLink;

    void Page_Load(object sender, EventArgs e)
    {

        cssLoc = "../../Content/css/expect.css?t=" + DateTime.Now.Ticks.ToString();
        cssLink = String.Format(@"<link rel=""stylesheet"" type=""text/css"" href=""{0}"" />", cssLoc);
    }
</script>

<!DOCTYPE html>
<html>
<head id="Head1" runat="server">   
    <asp:ContentPlaceHolder ID="head" runat="server">
    <title></title>
    </asp:ContentPlaceHolder>    
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    <%= cssLink %>
    <script type="text/javascript" src="../../Scripts/jquery.js"></script>
</head>

Редактировать: Помимо ответа на ваш прямой вопрос, я бы рекомендовал найти более дружественное к MVC решение (вместо того, чтобы помещать код на главную страницу). Например, вы можете включить местоположение css как ViewData ["Stylesheet"] или использовать другой механизм для обновления css (я не в курсе RC MVC)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...