我想使用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代码完成了它。它更灵活,更易于管理。我的同事帮助了我。谢谢大家的帮助!!!
答案 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%>';
希望这有帮助。