【问题标题】:Obtaining textbox values from jquery modal popup which has repeater control within it从其中具有中继器控件的jquery模式弹出窗口获取文本框值
【发布时间】:2014-08-01 22:48:06
【问题描述】:

我有一个非常奇怪的问题,我只是不明白。我有一个内置在 jquery 模式中的 asp.net 转发器控件。

控件的代码在这里。

<div id="dialog" style="display:none">
<asp:Repeater id="myrepeater" runat="server" >
    <HeaderTemplate></HeaderTemplate>
    <ItemTemplate>
        <asp:TextBox ID="txtAnswer" TextMode="MultiLine" Columns="50" Rows="4" runat="server" />

    </ItemTemplate>
    <FooterTemplate></FooterTemplate>
</asp:Repeater>
</div>
<asp:Button ID="Button1" runat="server" Text="Button" style = "display:none" OnClick="Submit1" OnClientClick="return ValidateInput()" />

然后我从 asp.net vb.net 代码后面的方法调用 jquery/javascript PopupCenter。

function PopupCenter() {
    $(function () {
        $("#dialog").dialog({
            title: "Questions and answers",
            width: 1200,
            height: 750,
            buttons: {
                Ok: function () {
                    $("[id*=Button1]").click();
                },
                Close: function () {
                    $(this).dialog('close');
                }
            }
        });
    });
}

一切正常。模式与文本框一起出现。我已将我的 asp.net 按钮绑定到名为 Submit1 的回发事件。在成功触发的代码中,我然后执行此操作...

Protected Sub Submit1(ByVal sender As Object, ByVal e As System.EventArgs)
 For i = 0 To myrepeater.Items.Count - 1
    Dim dynTxtAnswer As TextBox =    DirectCast(qtaRepeater.Items(i).FindControl("txtAnswer"), TextBox)           
Next
End Sub

所以在上面的 for 循环中,我期望的是转发器中文本框的文本值。我可以访问文本框。只是它声明一个空字符串而不是字符串值。所以整体完全难住了。我想知道是否有人知道为什么会发生这种情况。

谢谢。

【问题讨论】:

  • $("#dialog").dialog({ 方法中添加 appendTo: "form" 属性
  • 您能否描述得更详细一些。到目前为止感谢您的建议。
  • appendTo 是对话框功能的一个属性,它仍然不起作用,然后参考 que stackoverflow.com/q/757232/3087450 它可能对你有用
  • 问题是我可以提出回发。我什至可以获取文本框并在事件背后的代码中循环它们。这样回发就完成了。我只是无法获得这些值。

标签: javascript jquery asp.net vb.net


【解决方案1】:

下面代码试试

在模态对话框的OK事件中添加代码

Ok: function () 
{
   __doPostBack("<%= Button1.UniqueID %>", "");
}

【讨论】:

    【解决方案2】:

    请试试这个代码:

    Dim textString as String = "Null"  
    
    Dim txtBoxValue As TextBox    
    
    Dim i As Integer = 0   
    
    For Each item In myrepeater.Items 
    
       txtBoxValue = item.FindControl("txtAnswer")  
    
       If Not IsNothing(txtBoxValue) Then    
    
         i += 1  
    
         textString = txtBoxValue.Text 
    
       Else        
       End If    
    Next
    

    让我知道它是否适合你。

    【讨论】:

    • 您好,我尝试了您的方法,这与我正在做的类似。它没有用。我可以进入循环,所以它会拿起控件,就像我的一样。它只是看不到任何文本属性值。
    【解决方案3】:

    我无法解决问题,所以我设法解决了问题。

    我创建了一个隐藏的 asp.net 字段

     <input id="Hidden1" type="hidden" runat="server" />
    

    然后我使用 Jquery 拾取转发器文本框并将值捆绑到一个 javascript 数组中,使用 | 将其分隔开。像这样……

      var cntrlAnswer = $('.cssAnswer')
      for (var i = 0; i < cntrlAnswer.length; i++) {
                repeaterTxtVals[i] = cntrlAnswer[i].value}
    
      document.getElementById('<%= Hidden1.ClientID %>').value = repeaterTxtVals.join('|');   
    

    然后在代码隐藏事件处理程序中,我将其拾取并对其进行处理。

      Dim strAnswers As String() = Hidden1.Value.Split("|".ToCharArray())
    

    感谢您给我的任何提示,他们帮助很大。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-03
      • 2021-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多