我在文本框中使用带有模板的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>
答案 0 :(得分:2)
使用jQuery函数来代替使用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 + ")" %>' />
答案 1 :(得分:2)
我第二次呼吁Darin使用不引人注目的JavaScript。但是,这并没有回答你关于为什么ASP.NET这样做的问题。
你得到的原因
onClick="setGridInEditMode(<%# Container.RecordIndex %>);"
是因为数据绑定到服务器控件属性要求您直接绑定到属性而不介入文本。这意味着,只允许Property="<%# ... %>"
。
所以在你的情况下,你需要以迂回的方式说出你想要的东西(尽管我个人认为这更清晰,更易于维护):
onClick='<%# String.Format("setGridInEditMode({0});", Container.RecordIndex) %>'
(尽管看你的单引号和双引号!)
此限制仅将 应用于服务器控件及其属性。它不适用于服务器控件的嵌套文字内容(例如模板或面板的主体),也不适用于其他地方使用的纯HTML,这可能是您之前从未注意过的原因。