在Webforms框架中通过javascript设置表单字段值

问题描述 投票:0回答:1

我有一个网格和表单元素,我从网络服务读取网格并填充它。我想要做的是,当用户单击按钮时,网格上有一个按钮列,我想设置表单部分的公司名称字段的值。我们的框架是 webforms 。我从网格中获取了公司名称,但无法设置表单部分的字段。问题出在 id 上。 Id是在运行时指定的,表单中的id是txtFirmaAdi,但我无法在js中设置它。谢谢,我的脚本如下:

 function callme(e) {
           
            var tds = e.parentNode.parentNode.getElementsByTagName('td');
            var text = $('[id$="txtFirmaAdi"]');  
          
            text.value = tds[1].innerHTML.trim();
            text.value = "DEneme";
           

我的表单aspx如下:

           <div class="form-horizontal">

            <div class="control-group">
                <label class="control-label">İşyeri Adı</label>
                <div class="controls">
                    <asp:TextBox runat="server" ID="txtFirmaAdi" CssClass="input-xlarge" MaxLength="220"></asp:TextBox>
                </div>
            </div>
javascript asp.net webforms
1个回答
0
投票

实际上,我发现最简单的方法是将按钮名称传递给 js 代码并从中开始工作。

HTML 标准是不提供具有相同 id 的控件或按钮等。

因此,当您将控件放入 GridView 时,它们可以(并且确实)拥有您分配的“id”,但由于多行,因此在大多数情况下,控件将被重新命名,并添加前缀带有 GridView ID,然后加上行号后缀(从 0 开始)。

所以,说这个简单的网格视图,以及像这样的行单击按钮:

<asp:GridView ID="GVHotels" runat="server" AutoGenerateColumns="False"
    DataKeyNames="ID" CssClass="table table-hover" 
    Width="45%">
    <Columns>
        <asp:BoundField DataField="FirstName" HeaderText="FirstName" />
        <asp:BoundField DataField="LastName" HeaderText="LastName" />
        <asp:BoundField DataField="City" HeaderText="City" />
        <asp:BoundField DataField="HotelName" HeaderText="HotelName" />
        <asp:TemplateField HeaderText="H Templated">
            <ItemTemplate>
                <asp:Label ID="txtHotel" runat="server" 
                    Text='<%# Eval("HotelName")  %>'  >
                </asp:Label>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:BoundField DataField="Description" HeaderText="Description" />
        <asp:TemplateField>
            <ItemTemplate>
                <asp:Button ID="cmdEdit" runat="server" Text="Edit"
                    CssClass="btn"
                    OnClientClick="myedit(this);return false;"
                    />
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>


<script>
    function myedit(btn) {
        var txtHotelc = "#" + btn.id.replace("_cmdEdit_", "_txtHotel_")
        var txtHotel = $(txtHotelc)
        alert("Hotel name from row = " + txtHotel.text())

        // get cells collection, NON templated columns
        var myrow = btn.closest('tr')
        alert(myrow.cells[0].innerText)
    }


</script>

加载网格视图的代码:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

    If Not IsPostBack Then
        LoadGrid
    End If

End Sub

Sub LoadGrid()

    GVHotels.DataSource = MyRst("SELECT * FROM tblHotelsA
                                WHERE Active = 1 ORDER BY HotelName")
    GVHotels.DataBind()

End Sub

我们现在有了这个:

因此,有 2 个用例:

我想要一个模板化控件(标签、文本框、复选框等)

或者

我想获取一个单元格集合项(数据绑定列)。

对于模板化控件(asp.net 控件),它们将如上所述应用编号方案 (GridViewName_ControlName_RowNumber)。

所以,我只是对按钮 ID 进行简单的替换(确保它是服务器端按钮)。

对于非模板化的单元格集合,我们选择当前行,然后按照上面的方式使用单元格集合。

© www.soinside.com 2019 - 2024. All rights reserved.