【问题标题】:ASP.NET UserControl get property in inline codeASP.NET UserControl 在内联代码中获取属性
【发布时间】:2016-03-01 13:35:36
【问题描述】:

我有一个用户控件,在控件的页面加载中我正在这样做:

if (ViewState["Lib"] != null)
{
    cfg.Lib = (string)ViewState["Lib"];
}

这个 Lib 属性可以用这样的文本框修改:

protected void Lib_e_Changed(object sender, EventArgs e)
{
    cfg.Lib = Lib_e.Text;
    ViewState["Lib"] = Lib_e.Text;
}

我在我的 ascx 文件中编写了以下 javascript:

alert('<%= cfg.Lib %>');

即使我更改了文本框中的文本,它也会始终返回默认值。我的文本框位于更新面板中,并且我已将 AutoPostBack 设置为 true。我缺少什么来更新我的价值吗?

【问题讨论】:

    标签: asp.net


    【解决方案1】:

    这是因为aspx页面渲染而发生的

    alert('<%= cfg.Lib %>');
    

    在您执行任何分配之前

    cfg.Lib
    

    为了使它可行,你可以做的是 .. 从服务器端注册脚本,如

        protected void Lib_e_Changed(object sender, EventArgs e)
        {
            cfg.Lib = Lib_e.Text;
            ViewState["Lib"] = Lib_e.Text;
    
            ScriptManager.RegisterStartupScript(updatePanelId, updatePanelId.GetType(), "AnyKey", "alert('" + cfg.Lib + "')", true);
           //ScriptManager.RegisterStartupScript(this, this.GetType(), "AnyKey", "alert('" + cfg.Lib + "')", true);
           //Page.ClientScript.RegisterStartupScript(this.GetType(),"AnyKey","alert('"+cfg.Lib +"')",true);  
        }
    

    【讨论】:

    • 我写了这个(因为更新面板),但它从来没有显示警报:Page.ClientScript.RegisterStartupScript(this.GetType(), "AnyKey", "$(document).ready( function () {alert('" + cfg.Lib + "');var prm = Sys.WebForms.PageRequestManager.getInstance();prm.add_endRequest(function () {alert('" + cfg.Lib + "') ;});});", true);
    • 我认为它几乎可以工作了。我需要替换注册的脚本。在第一次更新“cfg.Lib”时它会起作用,但如果我再次更新它,它不会更新脚本并保留旧值。
    • 哦,当然..可能你需要updatePanelId, updatePanelId.GetType()查看我的更新和stackoverflow.com/questions/11643578/…
    • 非常感谢,它现在正在工作,只是最后一个问题,它是替换注册的脚本内容还是将旧的注册脚本附加到新的?
    • 我忘了人!!在浏览器中查看 html 页面的源代码.. 你可以在那里找到它..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-20
    • 1970-01-01
    相关资源
    最近更新 更多