如何使用javascript将C#变量分配给asp元素

时间:2010-12-01 12:15:05

标签: c# javascript asp.net variables

我想使用javascript将csharp变量分配给asp页面的元素。似乎我的代码中的分配不起作用。

这是:

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

在我的asp代码中,我使用:

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

我无法使用Text='<%#SelectLabel%>'将值直接分配给linkbutton,因为我想让它更智能。

有谁知道怎么办?

由于

修改:

这是我的代码,我尝试使用<%=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; }

它抛出异常:

  

对象引用未设置为对象的实例

有人有想法吗?非常感谢

修改

最后,我们用csharp代码完成了它。它更灵活,更易于管理。我的同事帮助了我。谢谢大家的帮助!!!

4 个答案:

答案 0 :(得分:2)

假设SelectLabel是ASP.NET页面的公共或受保护字符串成员或属性,您应该能够使用以下方式呈现字符串:

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

您需要的“智能”是否有理由不能成为服务器端?如果您使用C#设置SelectLabel,您也应该能够动态设置lbAccessories.Text = SelectLabel;

答案 1 :(得分: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 :(得分:1)

添加一个id =“hid1”的隐藏字段并将其值设置为selectlabelvalue,然后:

document.getElementById('lbAccessories').innerHTML
     

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

JQuery的:

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

答案 3 :(得分:1)

lbAccessories是服务器端控件。当服务器为其发出HTML时,它会为控件分配一个唯一的ClientId。在JavaScript中,您必须通过它的ClientId访问它:

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

希望这有帮助。