【问题标题】:dynamic name for DropDownList in a GridViewGridView 中 DropDownList 的动态名称
【发布时间】:2011-12-03 18:52:51
【问题描述】:

我有一个 asp.net 页面,我在其中使用带有自定义分页的 gridView,并且在 gridview 中有一个 DropDownList 控件和基于每行控件的 javascript,它执行表单提交,并且必须引用与以下内容相关的唯一 DropDownList 名称这是行。

通常,如果我需要操作控件,我已经习惯于将“on databinding to row”类型的事件用于“FindControl”。但在这种情况下,我不能这样做,因为客户端脚本只会在渲染后引用这个控件。

在放置 DropDownList 的网格视图模板区域中,我尝试输出类似的内容:

... ID='<%# Eval("myID") + "_ddl" %>' ...

..仅作为示例,但编译器/解析器说“吠叫,吠叫,咆哮吠叫”你不能这样做,因为不能像这样分配 DopDownList 的 id。我还尝试在行数据绑定上分配控件的 CLientID,但它也不允许这样做,因为这是一个只写属性。

是否有任何简单的方法来实际控制 ddl 名称?我真的很想避免改变正在发生的事情的结构。我不需要找到 ddl 名称,我实际上需要使每一行中的每个 ddl 都是唯一的。 onclick 实际上来自其行中的另一个控件。不幸的是,JavaScript 是内联的。问题是 javascript 正在寻找具有唯一名称的 ddl,并且在网格视图中,ddl 的名称都是相同的。我的问题是如何在网格视图中为 ddl 强制使用唯一名称 ID。这可以做到吗。它不允许我使用我上面提到的方法。

这方面的一些背景是,这些数据曾经位于没有分页的普通表中。我不得不将它移动到 gridview 并进行自定义分页。

非常感谢您的建议..谢谢!

【问题讨论】:

    标签: c# asp.net


    【解决方案1】:

    我不确定您要解决哪个问题。可能是,我在下拉列表中,我需要找到 ClientId。然后使用 Chris Mullins 对How do I find the Client ID of control within an ASP.NET GridView?的回答中的答案

    使用'&lt;%# ((GridViewRow)Container).FindControl("ddlName").ClientID %&gt;'

    如果我需要从控件外部获取下拉菜单,那么您可以按照How to get cell value of gridview using JQUERY 中的描述遍历网格

    【讨论】:

    • 我的主要问题是 DropDownList 的 ClientID 对于 GridView 的每一行都不是唯一的。令人困惑的是基于行的 JavaScript bw因为最终会说 25 个具有完全相同名称的 DropDownList 控件。所以,我的问题是我需要控制每个 DDL 在呈现给客户端时的命名方式,以便不必更改 JavaScript。我可以毫无问题地获取值,但我的主要问题是我似乎无法控制 DropDownList 的 ID。这看起来很奇怪。
    • 我查看了您发布的 JQuery 示例。我会看看这是否能让我解决任何问题。但我对不得不重新构建 javascript 感到畏缩。基本上我只想要一个解决方案,我可以以某种方式强制我的 DropDownList ID 是唯一的......然后一切都会很好,我不必重新工作 js 是如何完成的。想要真正避免它。现在,js 在每一行的 onclick 事件中内联,并按名称引用其行中的 ddl。
    • 嗯...当我添加 ToolTip='&lt;%# ((GridViewRow)Container).FindControl("ddlControl").ClientID %&gt;' 时,我得到了一个唯一的 ID。格式为ContentPlaceHolderName_GridViewName_ControlName_RowID
    • 唯一的问题是 js 调用 document.getelementbyid("[dropdownlistnamethatisunique")。所以设置工具提示是行不通的。我需要实际的 ddl 来为浏览器呈现一个唯一的名称。现在这是我的问题。基本上 GridView 中的所有 ddl 在每一行中都是相同的名称,并且我不允许在 ddl ID 参数中运行 eval 语句。问题是,如何向客户端呈现不同行的唯一 ddl id in ddl ID 字段,以便 js 仍然可以使用 document.getelementbyid
    • 嗨康拉德,我想你可能正在做点什么。想了想你说的话,我不得不回来。您的意思是,如果我设置了工具提示,那么我可能能够将我的 js document.getelementbyid 更改为访问 js 中的工具提示的东西。我会试试这个并报告回来......它可能只是工作......
    【解决方案2】:

    我花了一些时间才回到这个问题。我不得不说,这次讨论无疑帮助我走上了一条通往答案的道路。网格视图中的 JavaScript 表单提交存在问题。解决方案最终被撕掉了 javascript 并在 ImageButton 控件上使用 CommandName="",然后我不得不使用事件处理程序来处理按钮单击事件,然后从 EventArgs 中的网格视图行中获取值,以然后调用 JavaScript 一直在调用的函数。再见 Javacript!我从中了解到,有时处理遗留代码并不值得。通过这种方式,改变事物以使其适合 ASP .Net 流模型最终会更好地工作。谢谢大家的回答,帖子,帮助。

    【讨论】:

      【解决方案3】:
      protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
          {
              DropDwonList objDD =(DropDownList)GridView1.Rows[e.RowIndex].FindControl("dropdownid"));
      

      【讨论】:

      • 您好 Diniesh,感谢您的回复。不幸的是,上述内容不适用于我的要求。同样,我不想find 控件的名称。我正在尝试对其进行设置,使其每行都有一个唯一的 ID。它不允许我动态设置行的 id。
      猜你喜欢
      • 2020-11-25
      • 2010-10-24
      • 2014-10-15
      • 1970-01-01
      • 2021-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-05
      相关资源
      最近更新 更多