【问题标题】:ASP.NET How to pass container value as javascript argumentASP.NET 如何将容器值作为 javascript 参数传递
【发布时间】:2010-12-08 03:28:41
【问题描述】:

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

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

【问题讨论】:

    标签: asp.net javascript grid obout


    【解决方案1】:

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

    你得到的原因

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

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

    所以在你的情况下,你需要以一种迂回的方式说出你想要的(虽然我个人认为这更清晰,更易于维护):

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

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

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

    【讨论】:

    • 目前,这是我采用的解决方案。而且我还发现,使用“DataBinder.Eval(..., format)” 的工作方式也是一样的。
    【解决方案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 + ")" %>' />                
    

    【讨论】:

    • @Darin:感谢您提供 jQuery 解决方案。由于我刚刚开始使用 jQuery 选择器,因此无法使代码正常工作。我已在此处发布了对此的后续问题:stackoverflow.com/questions/1592149/… 如果您能看看我可能做错了什么,我会很感激。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2012-11-09
    • 2011-06-17
    • 1970-01-01
    • 1970-01-01
    • 2012-01-04
    • 2012-10-18
    • 2012-10-28
    相关资源
    最近更新 更多