我的代码隐藏中有此属性。
public string LocationOptions
{
get { return Session["LocationOptions"].ToString(); }
set { Session["LocationOptions"] = value; }
}
在前端,我有这个 JavaScript。
<script type="text/javascript">
function pageLoad(sender, args) {
InitLocationsAutoComplete();
}
</script>
<asp:UpdatePanel ID="upScript" runat="server">
<ContentTemplate>
<script type="text/javascript">
function InitLocationsAutoComplete() {
var locationsJson = '<%= LocationOptions %>';
alert(locationsJson);
}
</script>
</ContentTemplate>
</asp:UpdatePanel>
我正在 C# 代码中的 getter 和 setter 上设置断点。
我正在使用 MVP,并且 setter 是由演示者调用的。
在首页加载时,一切按预期进行。 setter 上的断点首先被击中。然后是 getter 上的断点。最后,我收到了一个 JavaScript 警报,其中包含我期望看到的值。
我在其他更新面板触发的部分回发上遇到了问题。在这些上,我的 setter 断点命中了一个新值。接下来,我的 getter 断点被命中,如果我快速观看 Session["LocationOptions"]
我会看到那里的新值。但是当我收到 javascript 警报时,它仍然会警报第一页加载的初始值。
如果它仍然调用 C# 中的属性,那么我不明白为什么更新的值没有传递到 javascript。为什么我坚持使用第一页加载时的初始值?
最佳答案
据我所知,部分更新内容中的javascript不会重新执行/重新评估。我的理解是,部分更新本质上会编辑 DOM 以更新页面的一部分,但这不允许动态更新页面上的 javascript。您可以在服务器端使用 ScriptManager.RegisterClientScriptBlock
在部分回发期间注册更新的 JavaScript。
关于c# - 从 UpdatePanel/javascript 调用 C# getter - 永远不会获取更新的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14346193/