0

我有一个带有 ItemTemplate、EditTemplate 和 InsertTemplate 的 ListView。Edit 和 InsertTemplate 中有几个 TextBox。我需要计算 Javascript 中的一些值,但我不知道如何在我的 JS 函数中获取 ClientID 或将其作为参数传递。

Javascript函数:

<script type="text/javascript">
    function calculate() {
        var length = document.getElementById('???').value;
        var quantity = document.getElementById('???').value;
        var fullLength = document.getElementById('???');
        fullLength.value = length*quantity;
    }
</script>

我的 ListView 的 ASP.NET 部分:

<InsertItemTemplate>
    <asp:TextBox ID="Weight" runat="server" Text='<%#Bind("Weight") %>' />
    <asp:TextBox ID="Quantity" runat="server" Text='<%#Bind("Quantity") %>' />
    <asp:TextBox ID="FullLength" runat="server" Text='<%#Bind("FullLength") %>' />
    <asp:Button runat="server" ID="Insert" Text="AddNewEntry" CommandName="Insert" OnClientClick="calculate()" />
</InsertItemTemplate>

用什么来代替'???'?或者,我可以在 OnClientClick="calculate(???,???,???)" 的参数中以某种方式传递它吗?

在此先感谢,吉克拉

4

1 回答 1

0

现在 asp.net 支持 ClientIDMode“可预测”,您可以通过在 EditItemTemplate 中为更新按钮添加 OnClientClick 处理程序来做到这一点。

  • 将 ListView 的 ClientIDMode 设置为可预测。
  • 将 ListView 的 ClientIDRowSuffix 设置为行的主键(例如,Northwind 的 Products 表的 ProductID)
  • 将产品 ID 传递给 OnClientClick 处理程序
  • 使用 document.getElementById 获取字段的当前值。

例如,假设您将 ListView1 绑定到 Northwind 的 Products 表。Products 的主键是 ProductID。ListView 的声明性语法是:

<asp:ListView ID="ListView1" runat="server" DataKeyNames="ProductID" 
        DataSourceID="SqlDataSource1" ClientIDMode="Predictable" 
        ClientIDRowSuffix="ProductID">

EditItemTemplate 的更新按钮的声明性语法是:

<asp:Button ID="UpdateButton" runat="server" CommandName="Update" 
                        Text="Update" OnClientClick=<%# string.Format("ShowProductName('{0}');", Eval("ProductID")) %> />

OnClientClick 处理程序 javascript 是:

    <script type="text/javascript">
    function ShowProductName(prodId) {
        var prodNameTextBox = document.getElementById('ListView1_ProductNameTextBox_' + prodId);

        alert('product name is ' + prodNameTextBox.value);

        return false;
    }
</script>

注意:假设产品名称存储在名为 ProductNameTextBox 的文本框中。更改它以使文本框的名称与您想要的字段匹配。可预测模式将产生一个类似于 ListView1_YOURFIELDNAMEHERE_PRODUCTIDHERE 的 ID。

有关详细信息,请参阅http://msdn.microsoft.com/en-us/library/dd410598(v=vs.100).aspx

于 2013-01-06T00:28:16.240 回答