【问题标题】:Eval script for server side control's ID property?服务器端控件的 ID 属性的评估脚本?
【发布时间】:2019-08-14 23:34:43
【问题描述】:

使用以下 Eval 脚本设置 ID 属性会导致错误。 错误信息:服务器标签格式不正确。

 <asp:Panel runat="server" ID="<%# Eval("RENTER_ID") %>" Visible="false">

即使用 ID 属性的 '' 替换 "" 也会产生错误。 使用 '' 时出现错误提示

"控件的ID属性只能使用标签中的ID属性和一个简单的值来设置。例如:&lt;asp:Button runat="server" id="Button1" /&gt;"

有解决这个问题的想法吗?

【问题讨论】:

    标签: asp.net eval


    【解决方案1】:

    你做不到。

    为什么需要?如果是这样,您可以在某个时候引用它,您可以通过属性 ClientID 访问客户端 ID。

    示例,根据要求:

    <asp:Repeater runat="server" ID="repFoo">
        <ItemTemplate>
            <asp:Panel runat="server" ID="pnlFoo">
                <input type = "button"
                    onclick = "alert('<%# Container.FindControl("pnlFoo").ClientID %>');"
                    value   = "click to get id for <%# Container.ItemIndex %>" />
            </asp:Panel>
        </ItemTemplate>
    </asp:Repeater>
    

    【讨论】:

    • 该面板将为 GridView 中的每个项目呈现,以便稍后展开/折叠。
    • 如果你正在做同样的事情,但对于 div 元素,它可以正常工作。
      " style="display: none; position: relative">
    • 是的,那是因为它不是服务器控件。实际上,您正在尝试在运行时name a variable;这是不可能的。要获得唯一 ID,用于展开/折叠,请使用 ClientID,就像我建议的那样。 (类似于:
    • 请解释一下如何使用ClientID?如何使用它来检索该项目的 div?
    • 工作正常,谢谢,但如果我需要在后面的代码中获取所选项目的面板 ID 怎么办?
    【解决方案2】:

    正如 Silky 所说,你不能这样做。属性在无代码后面不能是动态的。一种解决方案是对 Panel 进行子类化:

    public class MyPanel : Panel
    {
        public override string ID
        {
            get
            {
                return "get from my datasource";
            }
            set
            {
                // noop
            }
        }
    }
    

    【讨论】:

    • return "从我的数据源获取";是什么意思?
    • 无论您的“RENTER_ID”来自什么。你必须给你的 Panel 一个属性才能从中获取它。
    【解决方案3】:

    您需要使用面板吗?可以只用html吗?

    <div id="<%# Eval("RENTER_ID") %>" style="display:none"></div> 
    

    【讨论】:

    • asp:panel 或 div;它的可见属性应该设置在服务器端。那么,我们需要那个 id 吗?有什么想法吗?
    【解决方案4】:

    试试这个

     <div runat="server" id='<%# Eval("IsVisible") %>' visible="false"> </div>
    

    试试这个 - 如果您进行格式化,它不会弹出任何消息,但会显示设计时错误。

    <asp:Panel runat="server" ID='<%# Eval("RENTER_ID") %>' Visible="false">
    

    【讨论】:

    • 这也会引发错误。错误:控件的 ID 属性只能使用标记中的 ID 属性和简单值来设置。示例:
    • 是的,我认为它仅适用于服务器控件。但是你可以试试
      ,至少它没有显示设计时错误。
    • 这也行不通。 runat="server" 为面板生成相同的错误。
    • @Anuraj - 你是如何通过一个未经充分研究的答案获得超过 8,000 个声望点的?我傻眼了
    【解决方案5】:

    asp.net 控件的 ID 不支持绑定。尝试使用 HTML 控件来解决。

    【讨论】:

      【解决方案6】:

      几乎总是当 asp.net 失败时,Jquery 会进入该领域以设置情况;)。例如,您可以这样做:

      在 HTML 中:

      <div>
      <input type="file" id="whatever" class="uploader" runat="server" />
      <span id="<%#Eval("ID")%>'"></span>
      </div>
      

      jquery:

          $('.uploader').on('change', function () {
              var id = $(this).next('span').attr('id');
           });    
      

      【讨论】:

        猜你喜欢
        相关资源
        最近更新 更多
        热门标签