【发布时间】:2011-11-19 17:46:15
【问题描述】:
我来自 MVC 背景,对 Web 表单几乎没有经验。
我已经确定问题出在哪里,但到目前为止我无法解决这个问题。
我有一个表单,用于在表单主体加载时执行 Javascript 函数。请注意 head 标签有一个 run at server 属性,因为它需要使用Request.QueryString。
代码如下:
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<script type="text/javascript">
function doSomething()
{
// Use web forms to do something
var foo = <%= Request.QueryString["input"] %>;
}
</script>
<title>Foo</title>
</head>
<body onload="doSomething()">
<form id="MainForm" runat="server">
<table width="272px" border="0" cellpadding="0" cellspacing="0">
<tr>
<td class="body">
...
</td>
</tr>
</table>
</form>
</body>
</html>
我收到以下错误:
SCRIPT5007:属性 doSomething 的值为 null 或未定义,不是 Function 对象。
我的猜测是某些东西在服务器或其他方式上执行。这在以前(一年多前)已经有效,因此可能会覆盖 Web 配置中的某些内容。我花了大部分时间在这上面,到目前为止没有运气。
编辑:生成的输出如下
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<script type="text/javascript">
function doSomething()
{
debugger;
var o = crmForm.queryString;
}
</script>
<title></title>
</head>
<body onload="doSomething()">
<form name="MainForm" method="post" action="fooPage.aspx?input=queryString" id="MainForm">
<div>
// hidden fields
<table width="272px" border="0" cellpadding="0" cellspacing="0">
<tr>
<td class="body">
// inputs
</td>
</tr>
</table>
</form>
</body>
</html>
【问题讨论】:
-
您可以尝试从 head 标签中删除
runat="server"。 -
您能否发布最终标记的样子?此外,您不需要使用
runat="server"来执行服务器端表达式。据说服务器端表达式似乎没有用引号引起来。你确定input是一个整数。因为如果不是,foo变量将是未定义的。 -
阿什,谢谢你的回复。请查看编辑
-
达林,感谢您的回复。请查看编辑。
-
@CodeRush,在生成的 HTML 中,您似乎使用了一些
crmForm.queryString变量,我看不到在任何地方定义。如果您将doSomething中的代码替换为警报,请将其放入 HTML 页面并在浏览器中运行,它可以正常工作。因此,您的 HTML 中肯定还有一些您没有显示的内容。
标签: javascript asp.net webforms dom-events