2009-10-19 30 views
2

我在文本框上使用带有模板的oBout Grid controlASP.NET如何将容器值作为javascript参数传递

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

回答

2

我想让Darin呼吁使用不引人注意的JavaScript。但是,这并不能回答你为什么ASP.NET正在这样做的问题。

原因你

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

是因为数据绑定到服务器控件的属性需要你直接绑定到财产不干预文本。这意味着,只允许Property="<%# ... %>"

所以你的情况,你需要说你想以一种迂回的方式是什么(虽然我个人认为这是更清楚一点,更容易维护):

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

(看你的单,双引用虽然!)

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

+0

现在,这是我一起去的解决方案。我还发现,使用“DataBinder.Eval(...,format)”的方式也是一样的。 – Sung 2009-10-20 02:28:58

2

而不是污染你的HTML与有关如何使用jQuery一个不显眼的解决方案JavaScript函数:

$(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 + ")" %>' />     
+0

@Darin:感谢您使用jQuery解决方案。由于我刚刚开始使用jQuery选择器,因此无法使代码正常工作。我在这里发布了后续问题:http://stackoverflow.com/questions/1592149/cannot-select-grid-element-through-jquery如果你能看看我可能会看到的东西做错了。谢谢。 – Sung 2009-10-20 02:27:45

相关问题