为updatepanel控件设置的值在返回到客户端ASP.NET 3.5时丢失



我正在开发一个遗留应用程序,遇到了一个奇怪的问题。我正在处理在生产中有效的代码,但在我的本地机器上,当我从机器上发布时,代码不再有效。它是一个面向.NET v3.5的ASP.NET web应用程序。我在更新面板中有一个隐藏字段,它有一个AsyncPostBackTrigger,指向页面上按钮的单击事件。单击该按钮时,将设置隐藏字段的值。然后,当控制返回到客户端时,有一个Javascript函数需要访问隐藏字段中的值。一切正常,但在Javascript中,隐藏字段值为空。下面是一些示例代码来演示我所说的内容:

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Test</title>
</head>
<body>
<form id="frmMyForm" runat="server">
<asp:ScriptManager ID="myScriptManager" runat="server"></asp:ScriptManager>
<asp:UpdatePanel ID="updControlDisplay" runat="server">
<ContentTemplate> 
<asp:HiddenField ID="hdnControl" runat="server"/>
</ContentTemplate>
<Triggers>  
<asp:AsyncPostBackTrigger ControlID="btnSetVal" EventName="Click" />
</Triggers>
</asp:UpdatePanel>
<asp:Button ID="btnSetVal" runat="server" Text="Set Value" />
</form>
<script type="text/javascript">
Sys.WebForms.PageRequestManager.getInstance().add_endRequest(endRequest);
function endRequest(sender, e) {
alert('endRequest fired!');
if ($("hdnControl").val() == "") {
alert("Value is blank");
}
}
</script>       
</body>

并且在代码隐藏文件中:

Protected Sub btnSet_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnSet.Click
'This code runs without any problem when the btnSetVal button is clicked
hdnControl.Value = "Y"
End Sub

正如我所说,代码现在在生产服务器上运行,但如果我在机器上的Visual Studio中运行它,它就不起作用。如果我把它发布到我们的开发服务器上,它也不起作用。我真的很感激任何/所有关于如何调试的建议。

我的开发机器是Windows7,我使用的是IIS 7。生产机器(应用程序工作的地方)使用IIS 6,我发布到的开发机器也是如此。

非常感谢。

在后面的代码中,您正在设置按钮控件btnSetVal.Value属性,您永远不会触摸隐藏字段。从技术上讲,这甚至不应该编译,因为ASP.NET按钮并没有这样的属性。

更改为hdnControl.Value = "Y"

我认为你应该替换这个:

if ($("hdnControl").val() == "")

这个:

if ($("#<%= hdnControl.ClientID %>").val() == "")

因为CCD_ 4是ASP.NET HiddenField。

最新更新