2011-06-13 59 views
2

好吧,我知道你可以从一个asp.net控制获取信息使用此代码:操纵asp.net“RUNAT =‘服务器’” HTML对象的JavaScript

var element = document.getElementById('<%=myControl.ClientID%>'); 

但是我不能操纵所述的HTML元素后,它抓住它在Javascript中。我需要做什么来改变在JavaScript中设置为runat =“server”的东西的属性?

它只能通过服务器端的C#吗?

为了进一步说明,我有一个通过Javascript更改大小的div,并试图让它的innerhtml中存在的mschart改变它的高度/宽度。但是,它在服务器上运行会导致问题。

<div id="div0" style="background-color:Silver; position: absolute; top: 0px; left: 0px; width: 480px; height: 245px;"> 
      <asp:Chart ID="chart0" runat="server" Height="245px" Width="480px" 
        BackColor="220, 230, 242" BackGradientStyle="None" 
         BackSecondaryColor="220, 230, 242"> 
      <BorderSkin PageColor="220, 230, 242" /> 
      </asp:Chart> 
     </div> 

编辑:结束了处理图表通过回传与查询字符串调整的,然后在初始化抓住这些值在JavaScript和调整大小的div那里。

+0

您还可以更改所有的HTML属性服务器端控制(控制与'RUNAT =“服务器”')的更多信息,因为即使ASP.NET控件最终也呈现给html控件。 – 2011-06-13 18:08:31

回答

4

因为元素有runat=server您只能修改代码后面的属性(服务器端)。但是,实际的客户端属性(如可见性)可以通过JavaScript更改。

4

这是有点不清楚你的意思。如果你的意思是,你想操纵服务器端的属性,或者调用服务器端函数,那么你不能通过JavaScript来做到这一点。您需要使用类似ajax或webmethods的东西。如果你的意思是你想修改它的客户属性,比如它是否可见,或者它包含了什么数据,那么你可以做到这一点。但是,您需要指定更多关于您想要做什么的信息。

编辑:基于您的更新的信息有好消息和坏消息

。是的,您可以更改客户端控件的大小,但这只会拉伸图像。 MSChart生成一个下载的图像文件。拉伸会导致质量差。

如果拉伸不是选项,您将需要重新生成新的尺寸图表。这将需要你使用某种Ajax,或者完全刷新页面。

+0

,或者他可以生成大图像并通过CSS调整大小,然后在需要时再次通过javascript调整大小。这样质量会得到保留 – 2011-06-15 12:22:17

3

如果该控件转换为简单的HTML元素,您应该能够编辑“控件”的客户端属性。但是,有时服务器端属性没有客户端模拟。

一个常见的事情要注意的是,如果控件没有设置为可见,那意味着它根本不会呈现在页面上;如果是这种情况,那么您无法通过JavaScript访问它。

2

如果你试图修改的是与和对象的高度没有任何理由下不应该工作:

var element = document.getElementById('<%=myControl.ClientID%>'); 
element.style.height = divHeight; 

只要看看在生成的HTML,与该名称的控制实际上是一个div或图像(或者您可以重新调整大小的东西),您可以在其中设置宽度和高度。我不知道Chart控件呈现的是什么。无论如何,请使用Firebug检查页面中的html元素,并查看javascript中所做的更改如何影响结果。

无论如何,请记住,您只能在javascript中设置客户端属性。这意味着你正在寻找一些div元素,而不是服务器端控件。知道服务器端控件确实呈现给html,你应该能够以某种方式实现你想要的。

2

我的建议是使用jQuery编写脚本。它将使用的是客户端脚本代码中的以下内容:

  1. 获取您需要的高度的元素。
  2. 获取要操作的元素。
  3. 从第1部分

变更数值元件高度如果你认为这将是很长的路要走,你的新的jQuery,我可以帮你与它的一些代码。

0

我试图操纵jquery中包含runat="server"属性的控件。我无法改变它。只要我删除runat="server",我注意到jQuery的变化发生。

你可以测试一下自己:

<asp:Label ID="myLabel">hello, warlord!</asp:Label> 
<asp:Label ID="myLabel2" runat="server">hello, warlord!</asp:Label> 
<script type="text/javascript">$("#myLabel").css("border", "3px solid red");</script> 
<script type="text/javascript">$("#myLabel2").css("border", "3px solid red");</script> 
0

我有同样的问题,当你的HTML控件(与RUNAT =“服务器”)是的ContentPlaceHolder内这通常发生。下面是我所做的:

我改变:

document.getElementById("mypopup").style.visibility = "visible"; 

到:

document.getElementById("ctl00_ContentPlaceHolder1_mypopup").style.visibility = "visible"; 

当您查看浏览器上的网页源代码,你会看到你的HTML控件真正有名字。

,你可以找到关于如何(通过JavaScript例如)实际使用正确的ClientID属性here