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 "predictable" をサポートするようになったので、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 に答える