2009-10-19 46 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

相關問題