我正在使用oBout Grid control在文本框中带有模板。
我想将参数传递给 JavaScript,即用户单击网格时网格的当前行索引。
但是结果
onClick='setGridInEditMode(<%# Container.RecordIndex %>);' />
结果为
onClick="setGridInEditMode(<%# 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>
最佳答案
我赞同达林关于使用不引人注目的 JavaScript 的呼吁。但是,这并不能回答您关于 ASP.NET 为何这样做的问题。
你得到的原因
onClick="setGridInEditMode(<%# Container.RecordIndex %>);"
是因为到服务器控件属性的数据绑定(bind)要求您直接绑定(bind)到属性,无需插入文本。这意味着,只有 Property="<%# ... %>"
是允许的。
因此,就您而言,您需要以迂回的方式说出您想要的内容(尽管我个人认为这更清晰且更易于维护):
onClick='<%# String.Format("setGridInEditMode({0});", Container.RecordIndex) %>'
(请注意单引号和双引号!)
此限制仅适用于服务器控件及其属性。它不适用于服务器控件的嵌套文字内容(例如模板或面板的主体),也不适用于其他地方使用的纯 HTML,这可能就是您以前从未注意到这一点的原因。
关于ASP.NET 如何将容器值作为 javascript 参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1591081/