在数据绑定范围内创建变量

时间:2011-05-05 09:38:44

标签: c# asp.net data-binding

我正在对Repeater进行数据绑定,我希望能够访问设计代码模板中的变量。该变量将包含一些信息,供以后在数据绑定操作中使用 理想情况下,变量的范围将限于“数据绑定动作”。我可以简单地使用一个全局变量,但是,嘿,那就是作弊!

我尝试使用脚本块来定义变量,但这不起作用;变量是在Repeater模板范围之外创建的。

<% bool x; %>
<asp:Repeater ID="suggestionRepeater" runat="server">
   <ItemTemplate>
      <%# x = false %>  // x does not exist in current context
   </ItemTemplate>
</asp:Repeater>


<asp:Repeater ID="suggestionRepeater" runat="server">
   <HeaderTemplate>
       <% bool x; %>
   </HeaderTemplate>
   <ItemTemplate>
       <%# x = false %>  // x does not exist in current context
   </ItemTemplate>
</asp:Repeater>

如果不采用简单的路线并使用全局(或受保护的)变量,这是否可行呢?

3 个答案:

答案 0 :(得分:1)

嗯,如何使用函数并在脚本块中调用它?

<%# SetMyBool(Eval("RowID")) %>  

并在该函数中定义bool?如果你愿意,还是返回一个布尔值?

答案 1 :(得分:1)

我想你不能。反正不在标记中。你可以使用一个隐藏字段作为另一个答案说(更新:其他人稍后删除它!)我通常在做这样设置时它可见false和viewstate false但是嘿,为什么需要它呢...

你可以在数据绑定事件中做各种乐趣,但这与全局变量没有太大区别。

但是嘿,再说一遍,也许你正试图解决错误的问题!请记住,这是.NET,而不是C ++。即使变量超出范围,它也只能在需要时进行垃圾收集。即使对于价值类型的对象,它有多大可以得到? 此外,与转发器相比,整个页面生命周期还要多长时间?

如果物体真的“那么”贵并且你“真的”知道数字是一个很好的理由,你不希望它比数据绑定更长寿,那么它也应该是一次性物体(以保证适当的清理)资源),然后我可能会做类似的事情:

protected MyObjectType MyObject;

protected void BindRepeater(IEnumerable someDataSource)
{
    using(MyObject = SomeClass.SomeMethodToGetObject())
    {
        myRepeater.DataSource = someDataSource;
        myRepeater.DataBind();
    }
}

这里using应该通过隐式调用Dispose()来保证清理。当然,它仍然很脏,因为有人可能会犯错误,并且当它被处理或未被分配时在另一个地方使用MyObject即使我放了评论和所有内容,它毕竟是一个全局变量 - 是的,这是作弊,或解决限制。

同样,我不是建议你做上面的代码。我只是表明,如果你真的知道为什么要这样做(或者,它被称为过早优化,你可能最终会得到相同的性能,甚至在尝试解决问题时性能稍差,或者至多变得非常微不足道)性能提升)。我在这里建议的是再次查看问题并确保你真的需要这个。

解决这个问题的另一种方法与最小化生命周期完全相反,它实际上是在增加生命周期,比如把对象放在缓存中或者我们正在谈论的东西。所以你不必创建它超过需要或存储许多相同的大型副本,但这当然取决于什么样的数据

答案 2 :(得分:0)

<script language="VB" runat="Server"> 
        Dim rez As String
        public Function SetMyBool(v as string) As String
        rez=v
        End Function
</script>




<asp:Repeater runat="server" DataSourceID="dsRateSet">
<ItemTemplate>
<%# SetMyBool(Eval("result")) %>
</ItemTemplate>
</asp:Repeater>

<% =rez %>
相关问题