我正在尝试让应用程序允许用户为数字行选择一些内容,然后在用户提交表单后在服务器端执行某些操作。我遇到的问题是,如果我重新加载表,我只是返回默认值,如果我没有,表是空的。这是代码:
<asp:Table ID="tbl" runat="server">
<asp:TableRow>
<asp:TableHeaderCell>Question</asp:TableHeaderCell>
<asp:TableHeaderCell>Answer</asp:TableHeaderCell>
</asp:TableRow>
</asp:Table>
C#:
protected System.Web.UI.WebControls.Table tbl1;
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
init_tbl();
}
}
protected void init_tbl()
{
tbl1.BorderWidth = 1;
TableRow tr = new TableRow();
tc = new TableCell();
tc.Text = "text";
tc.BorderWidth = 1;
tr.Cells.Add(tc);
ddl = new DropDownList();
ddl.ID = "r" + index;
ddl.Attributes["runat"] = "server";
ListItem item;
for (int i = 1; i <= 10; i++)
{
item = new ListItem();
item.Text = i.ToString();
item.Value = i.ToString();
if (i.ToString().Equals(r.Trim()))
{
item.Selected = true;
}
ddl.Items.Add(item);
}
list.Add(ddl);
tc.Controls.Add(ddl);
tc.ID = "tblr" + index;
tr.Cells.Add(tc);
tbl1.Rows.Add(tr);
}
答案 0 :(得分:1)
你的问题是asp.net处理动态控件的复杂方式,你需要在设置视图状态之前在页面init上创建动态控件,以便在帖子上维护控件的状态,请参阅本文{ {3}}
你应该看看网格视图或至少一个转发器控件。
答案 1 :(得分:0)
我只是将一个问题列表和DataBind它们绑定到repeater / gridview / datagrid(如@Cybernate所说),然后将一个Event方法添加到数据仓的OnItemDataBound。
在ItemDataBound事件中,我会得到每个问题DataItem的答案列表,并将它们添加到DropDownList,就像你上面那样。
当用户填写所有答案时,您只需要通过Request.Form数组并找到将要传回的所有答案。
答案 2 :(得分:0)
您将表存储在ViewState中并根据需要使用它。