【问题标题】:Access HTML Inputs on Postback in ASP.NET在 ASP.NET 中访问回发时的 HTML 输入
【发布时间】:2015-12-24 09:42:30
【问题描述】:

我已经为此苦苦挣扎了好几天,试图访问 html 输入,即在运行时根据数据库结果生成的复选框或 textboxex。我作为文字控件添加到 asp 占位符的 HTML 如下所示:

<div class='cart-item'>
  <div class='product-name'> <h3>gold baseball figure</h3></div>
  <img src='Graphics/gold-trophy.png'></img>
  <div class='inventory-short-description'> <p>A finely crafted gold plated baseball figuring to top your choice of trophey base (sold seperatly).</p></div>        
  <div class='clear'></div>
  <div class='item-price'><p>$22.95</p></div>
  <div class='cart-item-checkbox'><label><input type='checkbox' id='1' name='1' runat='server'/> Select </label>
  <a href='products.aspx?viewItem=1'>view item </a></div></div

问题是,如何访问 .cs 代码隐藏页面中的此复选框?

生成此 html 并将其添加到页面的代码位于重写的 OnInit 方法中。查看回发的占位符表明该复选框位于文字控件中。

我试过了:

Page.FindControl() returns null when searching for dynamic control

ASP.NET page_init event?

FindControl() return null

http://forums.asp.net/t/1336244.aspx?finding+HTML+control

....还有无数其他人。

昨天我使用了一种骇人听闻的方式,使用 jquery 将这些复选框的值设置为 asp.net 隐藏字段。我的同事(所有 java 开发人员)说这似乎是访问这些元素的错误方法。有没有更好的办法?我开始认为我已经把自己编码到了一个我无法摆脱的地方。

感谢您的帮助。

【问题讨论】:

  • 为什么不在你的aspx页面中使用asp控件?
  • 不知道会从数据库返回多少结果。这些是在页面 Init 上添加的。
  • 你可以使用asp:repeater控件,它会在Databound时重复模板中的控件
  • @ramhemasri 请解释一下。我从 db 返回的对象具有带有公共 get/set 方法的私有字段。我还能用这个吗?
  • runat="server" 应该足以从 .cs 文件访问!我是在 asp.net 控件中完成的

标签: c# html asp.net


【解决方案1】:

在你的 .aspx 中

<asp:Repeater ID="rptItems" runat="server" EnableViewState="False">
        <ItemTemplate>
                <asp:TextBox ID="txtName" runat="server" /> 
        </ItemTemplate>
</asp:Repeater>

在您的 .aspx.cs 文件中,您可以在回发事件中访问转发器,如下所示

 foreach (RepeaterItem rptItem in rptItems.Items)
        {
            TextBox txtName = (TextBox)rptItem.FindControl("txtName");
            if (txtName != null) { System.Diagnostics.Debug.Write(txtName.Text); }          
        }

【讨论】:

  • 如何访问此文本框。您的示例将有 20 个具有相同 ID 的文本框。当我尝试使用 ID="" 之类的设置 id 时,VS 也会出错 错误 1 ​​控件的 ID 属性只能使用标签中的 ID 属性和简单值来设置。示例:
  • 你可以在你的页面和 button_click 事件循环中通过Repeater Items拥有asp:button控件
  • 另外,无法调用此对象的公共方法。公开字段并不是好的编程,如下所示:code.runnable.com/UjMj269qAWwQAAB3/asp-net-how-to-use-repeater
  • @CraigSmith 你能在 runnable 或 github 上分享你的代码吗?
  • 我刚刚开始工作。在我将对象更改为具有公共字段(有人告诉我不要这样做...)之后,aspx 页面可以获取转发器中的值。在回发时,我从文本框中取回了值。此方法有效,但至少在 2 个级别上是错误的。我现在有无效的 HTML --> 具有相同 ID 的多个元素并且无法控制对我的数据对象的访问。
猜你喜欢
  • 1970-01-01
  • 2013-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-15
  • 2014-07-02
  • 2013-09-08
相关资源
最近更新 更多