C# 使用EnableViewState=false从中继器中提取数据。。。如何/选择?

C# 使用EnableViewState=false从中继器中提取数据。。。如何/选择?,c#,.net,asp.net,visual-studio,viewstate,C#,.net,Asp.net,Visual Studio,Viewstate,大师, 所以我试图避免启用EnableViewState。。。 您可以看到的示例代码中有1个中继器和2个文本框。我将文本框绑定到page init。回发后,我想从客户端获取更新的数据并保存在数据库中 表单包含使用自动生成的客户端ID键入的数据,但中继器在回发后有0项。所以我的选择似乎只限于。 A.启用viewstate,以便使用Control.Find(…)从中继器中提取数据 B遍历Request.Form并找到我的文本框值…丑陋 还有其他建议吗? 最终目标是将数据表中的数据呈现到一些文本框中,

大师, 所以我试图避免启用EnableViewState。。。 您可以看到的示例代码中有1个中继器和2个文本框。我将文本框绑定到page init。回发后,我想从客户端获取更新的数据并保存在数据库中

表单包含使用自动生成的客户端ID键入的数据,但中继器在回发后有0项。所以我的选择似乎只限于。 A.启用viewstate,以便使用Control.Find(…)从中继器中提取数据 B遍历Request.Form并找到我的文本框值…丑陋

还有其他建议吗? 最终目标是将数据表中的数据呈现到一些文本框中,允许用户进行更改,然后保存这些更改。如果有干净的替代方案,我希望避免使用viewstate

谢谢你的帮助

ASPX:


您可以尝试始终绑定中继器。只需在if(!Page.IsPostBack)

中设置文本框的初始值即可尝试始终绑定中继器。如果(!Page.IsPostBack)

Atanas或多或少正确,只需设置文本框的初始值即可。在没有viewstate的情况下,中继器需要在每次请求时反弹。如果您担心数据源在发布之间发生变化,则需要将数据表或更小的数据结构存储在某个位置(viewstate、session),然后重新绑定到该位置。

Atanas或多或少是正确的。在没有viewstate的情况下,中继器需要在每次请求时反弹。如果您担心数据源在发布之间发生变化,您需要将datatable或更小的数据结构存储在某个位置(viewstate、session)并重新绑定到该位置。

在Page_Load方法中绑定它们,而不是在init方法中绑定。如何将客户端事件绑定到submit按钮,然后将值发布到web服务以更新数据库?在我将数据提交到web服务后…我将如何将其拉出(想想绑定到中继器的100行)…我必须从请求中解析它。表单不在Page_Load方法中绑定它们,而不是在init方法中绑定它们。如何将客户端事件绑定到submit按钮,然后将值发布到web服务以更新数据库?在我将数据提交到web服务后…我将如何将其取出(想想绑定到中继器的100行)…我必须从请求中解析出来。格式不重要。如果他关闭viewstate,那么在发布表单时服务器将不会“看到”这些值(仅在原始的httppost数据中,而不是绑定到服务器端输入元素),这无关紧要。如果他关闭viewstate,则在发布表单时,服务器将不会“看到”值(仅在原始http post数据中,未绑定到服务器端输入元素)。很抱歉,这里的帖子太晚了,但它与我遇到的一个类似问题有关,而且似乎没有结束。很抱歉,这里的帖子太晚了,但它和我遇到的一个类似的问题有关,它看起来并没有结束。
 <%@ 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;
        }
    }