在加载ASCX文件之前通过代码填充变量

时间:2014-08-18 14:57:58

标签: c# asp.net

我有这个代码,用于在我的网站上显示Flash Clock。我从后面的代码中获取源和时间,并将其作为ASCX文件中的json参数传递给flash swf,如下所示:

<li class="clock">
  <span id="divAnalogClock">
    <script type="application/json">
      {settings:{id:'Clock', src:'<%# AnalogClockUrl %>', height:22, width:22, color:"#ffffff", allowScriptAccess:'sameDomain', align:'middle', installmessage:'', flashvars:{time:"<%# SiteTime %>", color:"#FFFFFF"}}}
    </script>
  </span>
</li>

这会产生类似于:

的东西
<embed height="22" flashvars="time=<%# SiteTime %>&amp;color=#FFFFFF" 
       pluginspage="http://www.adobe.com/go/getflashplayer"
       src="<%# AnalogClockUrl %>" type="application/x-shockwave-flash"
       width="22" quality="high" wmode="transparent" allowscriptaccess="sameDomain" 
       allowfullscreen="false" scale="exactFit" id="analogClock" color="#ffffff"
       align="middle" name="analogClock">

在Page_Load:

上生成变量AnalogClockURL和SiteTime
void Page_Load(object Sender, EventArgs e)
{
    LoadClock();
}

private void LoadClock()
{
    var flashList = CmsHelper.GetFlashList(new List<string> { "Clock" });
    var flash = flashList.SingleOrDefault(f => f.Key.Equals("Clock"));

    if (flash != null)
    {
        AnalogClockUrl = flash.FlashUrl;
    }

    SiteTime = string.Format("{0:HH}:{0:mm}:{0:ss}", TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow, Techsson.SiteIntegration.Core.Http.RequestContext.Current.Market.TimeZone));
}

然而,ascx首先被触发,因此字段被留空,当页面加载被踢入时,为时已晚(从我正在进行的调试)。我该怎么做才能确保首先填充变量?

我也对解决这个问题的其他建议持开放态度,以防我所追求的并不是解决这个问题的最佳方法。

1 个答案:

答案 0 :(得分:2)

<%#更改为<%=

<%#用于数据绑定,但您没有任何约束。如果您真的想,可以在嵌入标记中添加runat="server",然后在Page_Load事件中添加analogClock.DataBind(),但在此实例中似乎没有必要。