2

テキストボックスのテンプレートでoBoutグリッドコントロールを使用しています。

ユーザーがグリッドをクリックしたときのグリッドの現在の行インデックスであるjavascriptに引数を渡したいと思います。

しかし、の結果

    onClick='setGridInEditMode(<%# Container.RecordIndex %>);' />

として出てきます

     onClick="setGridInEditMode(&lt;%# Container.RecordIndex %>);"

コンテナ値をjavascriptに渡す方法はありますか?

これが問題のマークアップです。

<cc1:Grid ID="_TrustGrid" runat="server"
        FolderStyle="Styles/style_7"
        AllowAddingRecords="False" 
        AllowSorting="false"
        AllowPageSizeSelection="False"
        AllowPaging="False"
        AllowMultiRecordEditing="true"
        AutoGenerateColumns="False" 
        OnUpdatecommand="_TrustGrid_UpdateCommand"
        OnRebind="_TrustGrid_Rebind">
    <Columns>
        <cc1:Column AllowEdit="true" AllowDelete="false" HeaderText="Edit" Width="130" runat="server" />
        <cc1:Column DataField="TrustDocID" HeaderText="TrustDocID" Width="125" ReadOnly="false" AllowDelete="false" TemplateId="trustDocIDGridTemplate" />
    </Columns>
    <Templates>
        <cc1:GridTemplate ID="trustDocIDGridTemplate" ControlID="tb1" runat="server">
            <Template>
                <asp:TextBox ID="trustDocIDTextBox" runat="server" 
                    Visible="true"
                    Text='<%# Container.Value %>'
                    onClick= 'setGridInEditMode(<%# Container.RecordIndex %>);' />
            </Template>
        </cc1:GridTemplate>
    </Templates>
</cc1:Grid>
4

2 に答える 2

2

HTMLをjavascript関数で汚染する代わりに、jQueryを使用した目立たないソリューションはどうでしょうか。

$(function() {
    $('#_TrustGrid input[id*=trustDocIDTextBox]').each(function(index) {
        $(this).click(function() {
            setGridInEditMode(index);
        });
    });
});

代わりに、よりASP.NETishのソリューションを好む場合は、いつでもこれを行うことができます。

<asp:TextBox 
    ID="trustDocIDTextBox" 
    runat="server" 
    Visible="true"
    Text='<%# Container.Value %>'
    onclick='<%# "setGridInEditMode(" + Container.RecordIndex + ")" %>' />                
于 2009-10-19T21:08:08.640 に答える
2

控えめなJavaScriptを使用するためのDarinの2番目の呼び出しです。ただし、ASP.NETがこれを行っている理由についての質問には答えられません。

あなたが得る理由

onClick="setGridInEditMode(&lt;%# Container.RecordIndex %>);"

サーバーコントロールプロパティへのデータバインディングでは、テキストを介在させずにプロパティに直接バインドする必要があるためです。つまり、Property="<%# ... %>"許可されるのはのみです。

したがって、あなたの場合、あなたは回り道であなたが望むものを言う必要があるでしょう(私は個人的にこれはもう少し明確でより維持しやすいと思いますが):

onClick='<%# String.Format("setGridInEditMode({0});", Container.RecordIndex) %>'

(ただし、一重引用符と二重引用符に注意してください!)

この制限は、サーバーコントロールとそのプロパティにのみ適用されます。サーバーコントロールのネストされたリテラルコンテンツ(テンプレートの本体やパネルなど)にも、他の場所で使用されるプレーンHTMLにも適用されません。これが、これまで気づかなかった理由です。

于 2009-10-19T21:22:42.570 に答える