【问题标题】:cannot retain the control state after postback in asp.net在asp.net中回发后无法保留控制状态
【发布时间】:2011-06-28 09:34:04
【问题描述】:

我正在使用 asp.net 3.5。我有一个要求,例如动态生成类型 ='radio' 的 html 输入控件列表。我将 onclick() 事件写入所有控件。因此,如果我单击任何收音机控件,它将转到javascript函数,然后提交表单。根据单击的单选输入的值,将相关数据加载到另一个控件。

所有功能都运行良好。 但现在我的问题是提交页面后(回发后)未检查单击的单选输入。 那么如何保持单选按钮被点击的状态呢。

实际上我将单击的单选按钮存储到 javascript 函数中的隐藏字段中。然后我尝试从该隐藏字段中检索值并转换为单选按钮以设置属性 checked=true。但它不起作用。

所以请帮帮我。

protected void Page_Init(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            IQueryable<tblOrganization> orglist = from o in db.tblOrganizations
                                              where o.CreatedBy == "Licensee" && o.RefID == user.UserID
                                              select o;
        if (orglist != null && orglist.Count() > 0)
        {
            string list = "<table border='0' cellpadding='0' cellspacing='0' width='350px'>";
            foreach (tblOrganization o in orglist)
            {
                list += "<tr>";
                list += "<td style='width:25px;' align='right' valign='top'><input type='radio' runat='server' name='org' id='" + o.OrgID + "' ViewStateEnabled='true' onclick='javascript:fnBindGroup(" + o.OrgID + ",this)'  /></td>";
                list += "<td style='width:325px;hieght:25px' align='left' valign='top'><a id='" + o.OrgID + "' href='#' onclick='javascript:fnSelectOrg(" + o.OrgID + ")' >" + o.OrgName + "</a></td>";
                list += "</tr>";
            }
            list += "</table>";
            divOrg.InnerHtml = list;
        }
        }
    }

【问题讨论】:

  • 请张贴代码。初始化+回发。

标签: asp.net


【解决方案1】:

正如 Arthur 所说,如果您在 Page_Load() 事件中创建控件,请在 Page_Init() 中移动控件创建。如果没有帮助,请发布代码以获取更多信息

【讨论】:

    【解决方案2】:

    我假设 ASP.NET 经典,而不是 MVC。

    如果您在 Page_Load 事件中创建控件,那么您的所有状态都将在回发后销毁,因为 Viewstate 是在 Page_Init 之后和 Page_Load 之前评估的。但是,如果您在 Page_Load 中创建控件,则在评估 Viewstate 时它不会出现。

    尝试将控件创建移动到 Page_Init

    另见http://msdn.microsoft.com/en-us/library/ms178472.aspx

    编辑

    哦,我明白了。

    1) 动态创建 ASP.NET 控件时,您必须每次都重新创建它们,而不仅仅是在初始 Get Request 中。 ASP.NET 不会为您维护控件,只维护它们的状态。

    2) 您正在公开纯 HTML。 ASP.NET 不知道它们。但是:在 Request 对象中你可以找到原始发布的数据

    var value = Request["someid"]
    

    你有两个选择:

    1) 创建 ASP.NET 控件并将它们添加到控件树中(在 page_init 中)

    2) 写出纯 HTML 输入标签(可以在 OnPreRender 中完成)并通过 Request[...] 读取结果

    【讨论】:

    • 我将控件创建从 page_load 更改为 page_init。但它没有工作。我会得到相同的结果。
    猜你喜欢
    • 2011-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多