代码之家  ›  专栏  ›  技术社区  ›  BuddyJoe

ASP.NET MVC-每次处理网站.master时执行代码

  •  1
  • BuddyJoe  · 技术社区  · 15 年前

    每当我的网站被处理时,我想在我的CSS链接的路径上添加一些变量。正确的方法是什么?我的代码当前在default.aspx上中断,说我没有定义csslink。站点。主代码如下:

        <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过渡,标题出现次数太少”的消息?

    更新:
    请忽略范围问题。看理查德的回答。不过,我要注意的是,解决这一问题并不能解决问题。
    我认为是因为inherits=“system.web.mvc.viewMasterPage”声明
    <script runat="server"> 块未被处理。

    4 回复  |  直到 15 年前
        1
  •  2
  •   Samantha Branham    15 年前

    考虑编写一个助手来链接该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的更清洁的方法吗?

        2
  •  5
  •   xspydr    15 年前

    只需像通常那样定义CSS链接,并添加一些内联处理。您正试图在MVC视图中进行页面加载,这不是一个可行的解决方案…

    <link href="../../Content/css/expect.css?t=<%=DateTime.Now()%>" type="text/css" rel="Stylesheet" />
    
        3
  •  2
  •   Richard Szalay    15 年前

    您已在页面加载中将csslink声明为局部变量。因此,它将不可用于您的页面。

    这样可以解决以下问题:

    <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[“样式表”]包含在其中,或者使用其他机制来更新CSS(我在mvc的rc上不是最新的)

        4
  •  2
  •   Bill Konrad    15 年前
    <head runat="server">
          <title>Some Title</title> -- WILL FIX YOUR ISSUE
          ...
          <%= Helper.CustomStyle() %>
          ...
    </head>
    

    此helper.customstyle的内部逻辑将根据日期时间而变化。现在调用,如上所示。

    这里有一个非常好的教程,可以帮助您了解自定义帮助器: http://www.asp.net/learn/mvc/tutorial-09-cs.aspx

    记住——ASP.NET MVC可以消除页面加载类型调用。这是一个独特的设计模式!