如何通过ASP.NET代码隐藏获取放置在转发器中的html文本框的值?

时间:2011-11-03 23:05:53

标签: c# javascript jquery asp.net html

我有一个转发器,其中包含ItemTemplate中的文本框(html)。

我无法创建一个asp文本框,因为需要通过jQuery访问有问题的文本框,以便用户操作文本框。

用户完成后,在相应的转发器行中按下一个asp按钮,我想通过后面的代码(c#)获取用户输入文本框的值。

有人能告诉我这是否可能吗?如果是这样,可以建议一些代码吗?

否则,是否有任何非AJAX替代方案?

2 个答案:

答案 0 :(得分:1)

在jQuery中引用asp.net组件没有问题。有几点需要了解:

  1. 该项目的ID将包含您最初为控件提供的ID值。使用当前编码方案(我无法使Microsoft显着变化),<asp:TextBox ID="txtBox" runat="server" />在HTML中变为<input id="...._txtBox" name="...$txtBox" />。像$(input[id$=txtBox])这样的jQuery选择器会找到它。
  2. 因为asp控件最终解析为古老的HTML表单元素,所以您将它们视为您直接创建的HTML元素。在这种情况下,您可以使用禁用的伪类启用/禁用它。
  3. 通过查看我的网页生成的来源并查看发生的情况,我了解了很多这方面的知识。我喜欢FireFox和Web Developer的工具栏及其View Generated Source命令。

答案 1 :(得分:1)

这应该这样做。如果您需要/需要任何进一步的解释,请告诉我。

将它放在您的aspx页面中:

<form id="form1" runat="server">
<div>
<asp:Repeater ID="rptHtmlTag" runat="server">
        <ItemTemplate>
            <input id="htmlTextBox" runat="server" />
        </ItemTemplate>
</asp:Repeater>
</div>
<asp:Button ID="btnSubmit" runat="server" Text="Submit" />
</form>

把它放在代码隐藏中:

protected override void OnInit(EventArgs e)
{
    this.rptHtmlTag.ItemDataBound += new RepeaterItemEventHandler(rptHtmlTag_ItemDataBound);
    this.btnSubmit.Click += new EventHandler(btnSubmit_Click);
    base.OnInit(e);
}

void btnSubmit_Click(object sender, EventArgs e)
{
    foreach (RepeaterItem item in this.rptHtmlTag.Items)
    {
        HtmlInputText htmlTextBox = (HtmlInputText)item.FindControl("htmlTextBox");
        string THIS_IS_YOUR_VALUE = htmlTextBox.Value;
    }
}

void rptHtmlTag_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
    {
        HtmlInputText htmlTextBox = (HtmlInputText )e.Item.FindControl("htmlTextBox");
        htmlTextBox.Value = String.Concat("Some Value - Index", e.Item.ItemIndex);
    }
}

protected void Page_Load(object sender, EventArgs e)
{
    if (!this.IsPostBack)
    {
        List<int> repeaterPopulator = new List<int> { 1, 2, 3 };
        this.rptHtmlTag.DataSource = repeaterPopulator;
        this.rptHtmlTag.DataBind();
    }
}