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

如何在ASP.NET MVC母版页上插入HTML

  •  2
  • Keltex  · 技术社区  · 14 年前

    关于如何在ASP.NET MVC母版页中插入HTML,我有一个简单但可能是常见的问题。我的主页上有一个谷歌分析跟踪代码。代码如下:

    var _gaq = _gaq || [];
    _gaq.push(['_setAccount', 'UA-XXXXX-1']);
    _gaq.push(['_trackPageview']);
    // need to inject ecommerce code here
    (function () {
        // google analytics code here
    })();
    

    我正在使用电子商务跟踪,我想将“购物车”信息插入到收据页(并且只在该页)的这个HTML中。所以我会这样做:

    var _gaq = _gaq || [];
    _gaq.push(['_setAccount', 'UA-XXXXX-1']);
    _gaq.push(['_trackPageview']);
    <% if(ViewData["googleanalytics"]!=null) {%>
    <%= ViewData["googleanalytics"] %>
    <% } %>
    (function () {
        // google analytics code here
    })();
    

    然后在控制器中,我有如下代码:

    [HttpGet]
    public ActionResult Receipt()
    {
        var receipt = // get receipt model
    
        // get google analytics javascript. This function pulls
        // the data from the receipt model
        ViewData["googleanalytics"] = GetAnalyticsInfo(receipt); 
    
        return View(receipt);
    }
    

    这整件事看起来有点笨拙,我想知道是否有人有更好的办法来处理这种情况?

    4 回复  |  直到 10 年前
        1
  •  1
  •   Carson63000    14 年前

    你能把javascript分成两部分吗?

    在母版页的顶部,放置:

    var _gaq = _gaq || [];
    _gaq.push(['_setAccount', 'UA-XXXXX-1']);
    _gaq.push(['_trackPageview']);
    

    在母版页的底部,放置:

    (function () {
        // google analytics code here
    })();
    

    然后,在收据页视图的某个位置(它将在母版页的两个javascript之间输出),将

    <% if(ViewData["googleanalytics"]!=null) {%>
    <%= ViewData["googleanalytics"] %>
    <% } %>
    

    值得一试吗?

        2
  •  4
  •   Silvermind    10 年前

    我想我误解了你原来的问题。如果只在一个页面上发生这种情况,那么添加一个过滤器将是一个“更干净”的选项。

    过滤器:

    public sealed class GAFilter: ActionFilterAttribute
    {
       public override void OnActionExecuting(ActionExecutingContext filterContext)
       {
           filterContext.Controller.ViewData["googleanalytics"] = GetAnalyticsInfo();
           base.OnActionExecuting(filterContext);
       }
    
       private MvcHtmlString GetAnalyticsInfo()
       {
       }
    }
    

    行动:

    [GA]
    public ActionResult ()
    {
        return View();
    }
    

    如果可以将强类型的ViewModel绑定到MasterView,那就更好了,但是当前的MVC框架不允许这样做。viewdata是将信息从控制器推送到主控形状的朋友。

        3
  •  0
  •   Praveen    14 年前

    我觉得你想把GA代码应用到所有页面上?在这种情况下,您可以将帐户ID抽象到帮助程序类中,如下所示:

    public class Configuration {

    公共字符串googleanalyticsid { 得到 { 返回“在此处插入\u id\u”; } }

    }

    然后您可以在局部视图中引用它。将整个JS推入.ascx文件(在视图\共享下)

    var _gaq = _gaq || []; _gaq.push(['_setAccount', '<%= Configuration.GoogleAnalyticsId %>']); _gaq.push(['_trackPageview']); // need to inject ecommerce code here (function () { // google analytics code here })();

    现在,添加一个HTML.

    <%=Html.Partial("GoogleAnalyticsControl")%>

        4
  •  0
  •   Praveen    14 年前

    public override void OnActionExecuting(ActionExecutingContext filterContext) { MyController myController = (MyController)filterContext.Controller; myController.GetAnalyticsInfo(); base.OnActionExecuting(filterContext); }