在IIS上承载ASP.NET应用程序时,在该应用程序上运行Javascript代码时遇到问题。在本地运行时,它工作正常。我将身份验证设置为匿名并打开静态内容。我在脚本上放置了Console.log("BeginningScriptTest")
,它注册了。我将范围缩小到ct100_ContentPlaceHolder1,并收到错误Uncaught TypeError: Cannot set properties of undefined (setting 'value')
。我还在窗体中添加了ControlIDMode="Static"
。
父代码:
protected void Page_Load(object sender, EventArgs e)
{
btnFromDate.Attributes.Add("onclick", "window.open('Calender.aspx?textbox=txtFromDate','SelectDate','width=250,height=280,left=570,top=250');");
btnToDate.Attributes.Add("onclick", "window.open('Calender.aspx?textbox=txtToDate','SelectDate','width=250,height=280,left=570,top=250');");
}
子代码:
protected void GetDateCal_SelectionChanged(object sender, EventArgs e)
{
if (Request.QueryString["textbox"] != "")
{
string strScript = "console.log('BeginningScriptTest');window.opener.document.forms[0].ctl00_ContentPlaceHolder1_" + Request.QueryString["textbox"].ToString() + ".value = '";
strScript += GetDateCal.SelectedDate.ToString();
strScript += "';window.opener.document.forms[0].submit();console.log('EndScriptTest');";
Page.ClientScript.RegisterClientScriptBlock( this.GetType(), "Calendar_ChangeDate", strScript, true);
}
}
当我使用我的DevTools检查网页时,我可以清楚地看到脚本正在注册。
<form method="post" action"./Calender.aspx?textbox=txtFromDate" id="form1">
<div class=aspNetHidden">...</div>
<script type="text/javascript">...</script>
<script type="text/javascript">
//<![CDATA[
console.log('BeginningScriptTest');window.opener.document.forms[0].ctl00_ContentPlaceHolder1_txtFromDate.value = '12/9/2022 12:00:00 AM';window.opener.document.forms[0].submit();console.log('EndScriptTest');//]]>
</script>
<div class="aspNetHidden">...</div>
<div>...</div>
</form>
在我的IIS控制台上,我可以点击我的console.log('BeginningScriptTest')
,然后跟着Uncaught TypeError: Cannot set properties of undefined (setting 'value')
。
1条答案
按热度按时间gojuced71#
问题解决了。
它不是一个永久性的解决方案,因为它不能在本地工作,但是当它部署在IIS上时就可以工作。
我意识到我的父代码采用了
ContentPlaceHolder_txtFromDate
而不是ctl00_ContentPlaceHolder_txtFromDate
的ID,所以我从脚本中删除了ctl00_
前缀。我很困惑,所以如果有人能给我解释一下,那就太好了。