在asp.net中回发后无法保留控件状态

时间:2011-06-28 09:34:04

标签: asp.net

我正在使用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;
        }
        }
    }

2 个答案:

答案 0 :(得分:1)

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

如果在Page_Load事件中创建控件,则在回发后将销毁所有状态,因为View_ate是在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 [...]

读取结果

答案 1 :(得分:1)

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