我的页面中有以下脚本:
window.onload = LoadElement;
function LoadElement() {
document.getElementsByTagName('asp:Panel');
};
function setPage(frame, page) {
document.getElementById('WindowShow').innerHTML = page;
}
首先,我想让asp:Panel
读取它。继续我正在调用setPage
函数,以便将Page加载到此Panel ...中
但调试器会抛出错误“我无法将属性.innerHTML加载到空引用值。”
我从调试器中看到,实际上getElement的值为null,但是里面的值不是null
有人知道这里发生了什么吗?我很困惑......非常......
其他信息 用于调用脚本的子是:
Private Sub button1_Click(sender As Object, e As System.EventArgs) Handles button1.Click
Dim url As String = "/Pages/Support/Asp/Help01.aspx"
Dim urlURI As String = HttpContext.Current.Request.Url.AbsoluteUri
Dim urlPath As String = HttpContext.Current.Request.Url.AbsolutePath
Dim root_url As String = Strings.Left(urlURI, urlURI.Length - urlPath.Length)
Dim frameName As String = "WindowShow"
iPageLoad(frameName, sender, root_url + url)
End Sub
Public Sub iPageLoad(FrameId As String, sender As Object, msg As String)
Dim cstype As Type = Me.GetType()
Dim innerMess As String = msg
Dim url As String = HttpContext.Current.Request.Url.AbsoluteUri
Dim script As String = "setPage('" + FrameId + "', '" + innerMess + "')"
If Not Page.ClientScript.IsStartupScriptRegistered(Me.GetType(), "iPage") Then
Page.ClientScript.RegisterStartupScript(cstype, "iPage", script, True)
End If
End Sub
新脚本
<td id="TD1" rowspan="9" runat="server">
<asp:Literal id="WindowShow" runat="server" Mode="PassThrough" />
<script type="text/javascript">
function setPage(page) {
document.getElementById('WindowShow');
}
</script>
</td>
用这个脚本抛出错误“nnerHTML不是...的有效属性。”。
更新
这就是我的代码:
<table id="tbl" runat="server" class="maintable" >
<tr><td id="line1" class="tableline" runat="server">
<asp:Button ID="button1" runat="server" CssClass="tablebutton" Text="bla bla bla" />
</td>
<td id="TD1" rowspan="9" runat="server">
<asp:Literal id="WindowShow" runat="server" Mode="PassThrough" />
<script type="text/javascript">
function setPage(page) {
document.getElementById('WindowShow').innerHTML = page;
}
</script>
</td>
</tr>
</table>
这就是Server站点的样子:
<table id="MainContent_tbl" class="maintable">
<tr>
<td id="MainContent_line1" class="tableline">
<input type="submit" name="ctl00$MainContent$button1" value="bla bla bla" id="MainContent_button1" class="tablebutton" />
</td>
<td id="MainContent_TD1" rowspan="9">
'--------- It Shaw the TD1 but can't see the Literal element
<script type="text/javascript">
function setPage(page) {
document.getElementById('WindowShow').innerHTML = page;
}
</script>
</td>
</tr>
</table
答案 0 :(得分:0)
而不是asp:Panel
使用此:
window.onload = function () {
var panel;
panel = document.getElementById('<%=ServerSidePanel.ClientID %>');
// do something with panel
setPage(panel, "<span>Page inside panel.</span>");
};
function setPage(frame, page)
{
frame.innerHTML = page;
}
在代码隐藏中,在属性中公开控件:
protected ServerSidePanel
{
get
{
return ... // the panel you want to get in JS
}
}
编辑:服务器端html注入面板
如果您在服务器上有HTML并希望将其放在面板中,则根本不需要使用JS。您可以通过这种方式将其分配到Literal
而不是Panel
:
在ASPX页面中:
<asp:Literal ID="injectionPoint" runat="server" CssClass="looks_like_a_panel" Mode="PassThrough" />
在后面的代码中(这里是C#,抱歉我不会说VB):
string html;
// load somehow the html, here it is simply assigned
html = "<span>internal HTML</span>";
// assign html to literal
injectionPoint.Text = html;
这就是全部。根本没有JS。
在这里你可以找到一个完全相同但没有PassThrough
模式的VB示例:
答案 1 :(得分:0)
最后,我找到了一个可以解决这个问题的问题的解决方案,可能会打开另一个问题...
我使用两个脚本:
<script type="text/javascript">
window.onload = getTag()
function getTag() {
var td = document.getElementsByTagName('td');
return td;
}
</script>
<script type="text/javascript">
var myTD = getTag();
function setPage(page) {
// var ch = myTD.item(1).children[0];
//ch.value = page;
myTD.item(1).childNodes[1].innerHTML = '<iframe class="tablecolumndiv" src="' + page + '" />';
}
</script>
我的asp.net代码:
<td id="TD1" rowspan="9" runat="server" class="tablecolumn">
<div id="WindowShow" runat="server" class="tablecolumndiv">
</div>
</td>
在第一个脚本中,我为onload
元素调用了td
在第二个中,我从第一个调用返回的td
,并通过iFrame
动态传递我想要的页面。
现在提出的问题是“为什么我没有从asp.net代码中执行此操作”。
好吧,我做到了,但是当我完成工作时,我正面临着离开iFrame
的问题。
所以现在......明天......我会尝试关闭动态打开的iFrame
并完成所有问题......