【问题标题】:Asp.net Hidden field not having value in code behind, but *is* retaining value after postbacksAsp.net 隐藏字段在后面的代码中没有值,但 *is* 在回发后保留值
【发布时间】:2012-11-29 16:28:26
【问题描述】:

在我的 ASCX 中,我有一个定义为 <asp:HiddenField ID="hdnNewAsset" runat="server" /> 的 asp.net 隐藏字段。

在后面的代码中我有以下代码:

    protected void Page_Load(object sender, EventArgs e)
    {
        _service = new ArticleDataService(PortalId);

        if (!IsPostBack)
        {
            string rawId = Request[ArticleQueryParams.ArticleId];
            DisplayArticleDetails(rawId);
        }

        if (hdnNewAsset.Value.Trim() != string.Empty)
            ProcessNewAsset();
    }

现在,在我的前端,我有一个 javascript 函数来响应事件并设置隐藏字段并触发回发:

function assetSelected(assetGuid) {
    $('input[id*="hdnNewAsset"]').val(assetGuid);
    __doPostBack()
}

发生的事情是我的隐藏字段正在标记中设置(chrome 显示 [ <input type=​"hidden" name=​"dnn$ctr466$Main$ctl00$hdnNewAsset" id=​"dnn_ctr466_Main_ctl00_hdnNewAsset" value=​"98d88e72-088c-40a4-9022-565a53dc33c4">​ ]$('input[id*="hdnNewAsset"]'))。

但是,当回发发生时,hdnNewAsset.Value 是一个空字符串。

更令人费解的是Page_Load开头Request.Params["dnn$ctr466$Main$ctl00$hdnNewAsset"]显示98d88e72-088c-40a4-9022-565a53dc33c4,而在回发之后我的隐藏字段具有相同的值(因此隐藏字段在回发中持续存在),但我无法访问这个值来自hdnNewAsset.Value

谁能看到我做错了什么?

【问题讨论】:

  • 分配hdnNewAsset的代码在哪里?它受IsPostBackcheck 保护吗?
  • 您在回发周期的哪个时间点尝试访问该字段的值?如果您在加载视图状态之前执行此操作,那么您将得到一个空字符串。另外,你用的是什么浏览器?我在 Chrome 中看到过类似的问题(但仅在 Chrome 中)。尝试其他浏览器,看看是否得到相同的结果。
  • @Kami:没有设置值,我只是通过我在前端发布的 javascript 来设置
  • @BrianDriscoll,我正在尝试访问它在Page_Load 中显示的变量。开头Page_Load(已验证通过手表)hdnNewAsset.Value为空

标签: c# asp.net webforms


【解决方案1】:

好的,我发现了问题。

问题是上面发布的代码是 ASCX 用户控件的一部分。在父控件的 Page_Load 事件期间,该用户控件被动态加载到 asp.net 占位符中。

因此,似乎由于这两个调用都在各自调用的Page_Load 中,内部控件没有将其值绑定在内部控件的page_load 中。修改它,使我的内部控件加载到 Page_Init 而不是 Page_Load 修复所有绑定。

不确定我是否以对公众有意义的方式写了这篇文章。


编辑:似乎this part of the MSDN documentation 与我的问题有关:

如果控件是在运行时动态创建的,或者在数据绑定控件的模板中以声明方式创建,则它们的事件最初不会与页面上其他控件的事件同步。例如,对于在运行时添加的控件,Init 和 Load 事件在页面生命周期中发生的时间可能比以声明方式创建的控件的相同事件晚得多。因此,从它们被实例化的那一刻起,动态添加的控件和模板中的控件一个接一个地引发它们的事件,直到它们赶上它被添加到 Controls 集合期间的事件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-01
    • 1970-01-01
    • 2011-03-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多