2010-12-01 104 views
0

我想使用javascript爲asp頁面的元素分配一個csharp變量。看起來代理人不在我的代碼中工作。如何使用javascript將C#變量分配給asp元素

這就是:

document.getElementById('lbAccessories').innerHTML = '<%#SelectLabel%>'; 

在我的ASP代碼我使用:

<asp:LinkButton ID="lbAccessories" runat="server" />' 

我不能直接值分配給LinkBut​​ton的使用Text='<%#SelectLabel%>',因爲我想讓它更加智能化。

有誰知道該怎麼做?

感謝

編輯:

這裏是我的代碼,我試圖用<%=lbAccessories.clientId%>,但它會產生一個錯誤:lbAccessories不會在上下文中。

<script type="text/javascript"> 
    function function(Ref) { 
     if ('<%=TextBoxClientID%>' == 'txtLink') 
     { 
      document.getElementById('lbAccessories').innerHTML = '<%#SelectLabel%>'; 
     } 
     else if ('<%=TextBoxClientID%>' == 'btnSearch') { 
      document.getElementById('lbAccessories').innerHTML = '<%#ViewDetail%>'; 
     } 
    } 

</script> 

編輯:

<asp:GridView ID="gv1" AutoGenerateColumns="false" runat="server" 
    AllowPaging="true" OnPageIndexChanging="pic"> 
    <Columns> 
     <asp:TemplateField HeaderText=""> 
      <ItemTemplate> 
       <asp:LinkButton ID="lbAccessories" runat="server" OnClientClick='<%#string.Format("passAccessory(\"{0}\");", Eval("Ref"))%>'></asp:LinkButton> 
      </ItemTemplate> 
     </asp:TemplateField> 
    </Columns> 
</asp:GridView> 

編輯:

非常感謝大家誰張貼了建議。

我已經改變了JavaScript代碼如下:

<script type="text/javascript"> 
    function passAccessory(accessoryRef) { 

     if ('<%=TextBoxClientID%>' == 'txtLink') { 
      document.getElementById('<%= gvAccessories.FindControl("lbAccessories").ClientID %>').innerHTML = '<%#SelectLabel%>'; 
     } 
     else if ('<%=TextBoxClientID%>' == 'btnSearch') { 
      document.getElementById('<%= gvAccessories.FindControl("lbAccessories").ClientID %>').innerHTML = '<%#ViewDetail%>'; 
     } 
    } 
</script> 

*.aspx.cs文件,我已經補充說:protected LinkButton lbAccessories { get; set; }

它拋出一個異常:

Object reference not set to an instance of an object

任何人有想法?非常感謝

編輯:

最後,我們用CSHARP代碼做了。它更加靈活和易於管理。我的同事幫助了我。感謝大家的幫助!!!

+0

javascript在鏈接按鈕被添加到DOM之前執行 – cspolton 2010-12-01 13:01:40

+0

您似乎想要在單擊它時設置「LinkBut​​ton」的文本,但該按鈕將POST回到服務器點擊。這是你想要的嗎? – cspolton 2010-12-01 14:50:42

+0

這是一個用戶控件。不同的頁面包含用戶控件。但是當加載不同的頁面時,視圖有點不同。所以我想用javascript來判斷不同的條件,並在位於gridview的`LinkBut​​ton`中顯示不同的內容。 – 2010-12-01 15:01:44

回答

2

檢查輸出HTML是否實際上是您要查找的錨的ID。無論如何,您應該使用<%= lbAccessories.ClientID %>而不是從客戶端腳本引用服務器ID。

如果出於某種原因不願(或不能)使用<%= lbAccessories.ClientID %>然後檢查有關的jQuery插件,它允許您通過服務器ID來獲得DOM元素下面的文章:

http://radek-stromsky.blogspot.com/2010/11/aspnet-how-to-get-client-id-with-jquery.html

編輯:

我做你的代碼的一些變化:

<script type="text/javascript"> 
    function passAccessory(Ref) { 
     if ('<%= TextBoxClientID %>' == 'txtLink') 
     { 
      document.getElementById('<%= GridView1.FindControl("lbAccessories").ClientID %>').innerHTML = '<%# SelectLabel %>'; 
     } 
     else if ('<%= TextBoxClientID %>' == 'btnSearch') { 
      document.getElementById('<%= GridView1.FindControl("lbAccessories").ClientID %>').innerHTML = '<%#ViewDetail%>'; 
     } 
    } 
</script> 

<asp:LinkButton ID="lbAccessories" runat="server" OnClientClick='<%#string.Format("passAccessory(\"{0}\");", Eval("Ref"))%>'></asp:LinkButton> 

編輯:編輯:

我修正了上面的代碼。現在有GridView1.FindControl("lbAccessories")

2

假設SelectLabel是一個公共或受保護的字符串成員或ASP.NET頁面的屬性,你應該能夠使用呈現字符串:

document.getElementById('<%= lbAccessories.ClientID %>').innerHTML = '<%= SelectLabel%>'; 

有沒有爲什麼「智能」你需要一個理由不能在服務器端?如果您使用C#設置SelectLabel,則應該也可以動態設置lbAccessories.Text = SelectLabel;

+0

它將值賦給element.innerHTML,但它不顯示在linkbutton中。你知道爲什麼嗎? – 2010-12-01 12:25:32

+0

看到我的更新,如果你必須使用javascript,你需要在javascript中輸出LinkBut​​ton的ClientId。 – cspolton 2010-12-01 12:27:53

1

添加hiddenfield使用id = 「HID1」,並將其值設定爲selectlabelvalue,則:

document.getElementById('lbAccessories').innerHTML 

= document.getElementById('hid1').innerHTML;

JQuery的:

$('#lbAccessories).html($('#hid1').html()); 
1

lbAccessories是一個服務器端控制。當服務器爲它發出HTML時,它會爲控件分配一個唯一的ClientId。在JavaScript中,你必須通過它的ClientId來訪問它:

document.getElementById('<%=lbAccessories.ClientId%>').innerHTML = '<%#SelectLabel%>'; 

希望這會有所幫助。