如何在ascx \ Eval代码中“重构=>引入变量”?

时间:2015-07-28 10:49:30

标签: asp.net vb.net eval ascx

我有一些太复杂的代码

visible='<%#((String.IsNullOrEmpty(Eval("IDLingua").ToString()) [...]%>' runat="server">

我想引入一个变量来保存String.IsNullOrEmpty(Eval(“IDLingua”)。ToString()操作的结果。

我可以在Ascx代码或后面的代码中执行此操作。但经过几个小时的研究后,我仍然不明白该怎么做

2 个答案:

答案 0 :(得分:1)

您无法将此类对象指定给简单变量。

visible='<%#((String.IsNullOrEmpty(Eval("IDLingua").ToString())
[...]%>' runat="server">

一般情况下,我不建议在aspx视图上处理数据。在我看来,如果你在后面或甚至更早的代码中处理它(在从数据库中获取数据和在后面的代码中准备视图之间)会更好。视图应该是最小的,只有当前数据,而不是处理它。

无论如何......我猜你的Eval代码存在于转发器或使用数据绑定器的其他控件中。

您应该能够定义其他隐藏字段控件并将表达式保存在那里。

<asp:HiddenField id="hidTmp" runat="server" value='<%# String.IsNullOrEmpty(Eval("IDLingua").ToString() %>' />

但请记住,它只适用于<ItemTemplate>个标签内部。你可以使用hidTmp作为变量。

另一种方法可能是使用OnItemDataBound方法并使用后面的代码(引入变量不是问题):

https://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.repeater.onitemdatabound(v=vs.110).aspx

答案 1 :(得分:1)

这看起来像应该在UI之外的逻辑。您可以向包含逻辑

的对象IsVisible添加新属性
visible='<%#Eval("IsVisible")%>' runat="server">

或者在后面的代码中创建一个函数并调用它

visible='<%#IsVisible(Eval("IDLingua"))%>' runat="server">