对于这样的事情:

<asp:panel id="pnl_ItemOrder" runat="server" cssclass="ItemOrder" visible="<%# CheckEdit_Status(IsEditable) %>">


我怎么知道它是在使用Bind还是Eval?还是在做什么?

最佳答案

好的,因为我从事与Webforms密切相关的任何事情已经大约5年了,所以这将是对所发生情况的估计:

<body>
<form id="form1" runat="server">
<script type="text/C#" runat="server">
    private const bool isEdit = true;
</script>
<script type="text/C#" runat="server">

    private bool CheckEdit_Status(bool isEdit)
    {
        return isEdit;
    }

</script>
<asp:Panel ID="pnl_ItemOrder" runat="server" Visible="<%# (CheckEdit_Status(isEdit)) %>"
    Height="100" Width="100" BackColor="Aqua">
</asp:Panel>
<br />
<% pnl_ItemOrder.DataBind(); %>
</form>




这是我在逻辑推理中所经历的事情,并且我在学校还记得的几件事中,标记更常用于调用函数,eval用于评估对象并将其转换为字符串以表示在诸如重复器和数据网格之类的东西中,它们使用值数组。

Eval,用于从数据绑定器中获取项目并将其显示在其各自的数据绑定(这很重要)控制器中,在这里您调用的函数无需在页面上具有任何表示并且不在数据绑定控制器中而是在面板上进行设置,因此您告诉服务器为我设置此标志。

切换到Eval会引发一个异常,即我们无法将布尔值转换为字符串,因为无法将布尔值表示为字符串(是的,可以在其上调用object.ToString()方法,但是那并不是真的一样,在这种情况下,它将抛出异常,因为visible是布尔值而不是字符串值)。

如果我正确理解的话,Bind是Eval的旧版本,主要用于向后兼容。

TLDR;

既不是告诉服务器调用函数,也不是服务器返回的值=在此设置该值。

07-24 17:54
查看更多