2

我在文本框上使用带有模板的oBout Grid 控件。

我想将参数传递给 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

与其用 javascript 函数污染你的 HTML,不如使用 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

我赞同 Darin 的呼吁,即使用不显眼的 JavaScript。但是,这并不能回答您关于 ASP.NET 为何这样做的问题。

你得到的理由

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

是因为到服务器控件属性的数据绑定要求您直接绑定到属性而不插入文本。也就是说,只Property="<%# ... %>"允许。

因此,在您的情况下,您需要以迂回的方式说出您想要的内容(尽管我个人认为这更清晰且更易于维护):

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

(注意你的单引号和双引号!)

此限制仅适用服务器控件及其属性。它不适用于服务器控件的嵌套文字内容(例如模板或面板的主体),也不适用于其他地方使用的纯 HTML,这可能是您以前从未注意到这一点的原因。

于 2009-10-19T21:22:42.570 回答