Gurus,
Поэтому я пытаюсь избежать включения EnableViewState ...
Пример кода, как вы можете видеть, имеет 1 повторитель и 2 текстовых поля внутри. Я связываю текстовые поля на странице init. После обратной передачи я хочу получить обновленные данные от клиента и сохранить их в БД.
Request.Form содержит данные, введенные автоматически сгенерированными идентификаторами клиента, но ретранслятор имеет 0 элементов после обратной передачи. Так что мои возможности кажутся ограниченными.
а. Включите viewstate, чтобы я мог извлечь данные из репитера, используя Control.Find (...)
б. переберите Request.Form и найдите мои значения в текстовом поле ... безобразно !!
Есть еще предложения?
в конечном итоге цель состоит в том, чтобы преобразовать данные из данных в некоторые текстовые поля, позволить пользователю вносить изменения, а затем сохранять эти изменения. Я хотел бы избежать просмотра состояния, если есть чистая альтернатива ..
Спасибо или помощь.
ASPX:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Foo.aspx.cs" Inherits="Ads_Foo" EnableViewState="false"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="head" runat="server">
<title>Foo</title>
</head>
<body>
<form id="form" runat="server">
<asp:Repeater ID="repImport" runat="server" >
<HeaderTemplate></HeaderTemplate>
<ItemTemplate>
<asp:TextBox ID="lit1" runat="server" Text='<%# Eval("id") %>'/>
<asp:TextBox ID="lit2" runat="server" Text='<%# Eval("data") %>'/>
</ItemTemplate>
</asp:Repeater>
<asp:Literal ID="litOut" runat="server" text=""/>
<asp:Button ID="btn" runat="server" OnClick="clicked" Text="btn" />
</form>
</body>
</html>
Код сзади:
protected void Page_Init(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
DataTable dt = new DataTable();
dt.Columns.Add("cnt", typeof(int)); //item.ItemID
dt.Columns.Add("data", typeof(string)); //item.ItemID
DataRow row = dt.NewRow();
row["cnt"] = 123;
row["data"] = "Fake Item Id";
dt.Rows.Add(row);
DataRow row2 = dt.NewRow();
row2["cnt"] = 999999;
row2["data"] = "FPPPP";
dt.Rows.Add(row2);
repImport.DataSource = dt;
repImport.DataBind();
}
}
protected void clicked(object sender, EventArgs e)
{
foreach (RepeaterItem item in repImport.Items)
{
TextBox lit1 = (TextBox)item.FindControl("lit1");
TextBox lit2 = (TextBox)item.FindControl("lit2");
litOut.Text += lit1.Text;
}
}