我正在使用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;
}
}
}
答案 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()中移动控件创建。如果没有帮助,请发布代码以获取更多信息