C# 如何在asp.net中在窗体之间传递数据

C# 如何在asp.net中在窗体之间传递数据,c#,sql,asp.net,checkbox,datalist,C#,Sql,Asp.net,Checkbox,Datalist,我使用数据列表创建表单,并使用复选框完成表单。如下 <asp:DataList ID="DataListTest" runat="server" OnPreRender="PreTes"> <ItemTemplate> <table cellpadding="0" cellspacing="0"> <tr> <td> <asp:Label ID="lblHea

我使用
数据列表
创建表单,并使用
复选框
完成表单。如下

<asp:DataList ID="DataListTest" runat="server" OnPreRender="PreTes">
        <ItemTemplate>
    <table cellpadding="0" cellspacing="0">
        <tr>
        <td>
        <asp:Label ID="lblHeader" runat="server"></asp:Label>  <!-- Telephone, Bussines System -->                                    
        </td>

        </tr>
        <tr>
        <td>
        <asp:Label ID="lblsubheader" runat="server" /></td>    <!-- Oracle, EPM, CRM (Muncul di Form) -->
        </tr>

        <tr>
        <td>

        <asp:HiddenField ID="idJenisAccess" runat="server" Value='<%# Eval("id_jenis_access") %>' />
        <asp:HiddenField ID="subhd" runat="server" Value='<%# Eval("sub_jenis") %>' /> <!-- Oracle, EPM, CRM (nama sub jenis) --> 
        <asp:HiddenField ID="id_access" runat="server" Value='<%# Eval("id_access") %>' /><!-- Output = ACT5, ACBS1 -->
        <asp:HiddenField ID="hd" runat="server" Value='<%# Eval("nama_jenis") %>' /><!-- Output = Telephone, Bussines System -->
        <asp:HiddenField ID="hdstatus" runat="server" Value='<%# Eval("status") %>' /> <!-- Output = 1 or 0 -->
        </td>
        </tr>

        <tr>
        <td>
        <asp:CheckBox ID="cbCountryName" runat="server"  Text='<%# Eval("nama_access") %>' /> <!-- Output = Local, Handphone, Project -->
        <asp:TextBox ID="testme" runat="server" Text="" Visible="false" /> <!-- Output = Textbox for all -->            
       </td>
        </tr>

        <tr>
        <td><asp:Label ID="lblReason" runat="server" Visible="false" text="Reason : "/>
        <asp:TextBox ID="txtReason" runat="server" Visible="false" />    
        </td>                   
        </tr>

        <tr>
        <td>
        <asp:Label ID="lblDescription" runat="server" Visible="false" text="Description : "/>
        <asp:TextBox ID="txtDescription" runat="server" Text="" Visible="false" />
        </td>
        </tr>
   </table>
        </ItemTemplate>
    </asp:DataList>
这是我的
预渲染数据列表
,我称之为
预测试
。我的代码也是将数据显示为
复选框

protected void PreTes(object sender, EventArgs e)
{
    string temp = ""; 
    string subtemp ="";
    foreach (DataListItem item in DataListTest.Items)
    {
        Label objLabel = item.FindControl("lblHeader") as Label; /* Output = Telepon, Business System (nama jenis access) */
        Label subjenis = item.FindControl("lblsubheader") as Label; /* Output = Oracle, CRM, EPM (nama sub jenis access) */
        Label lblreason = (Label)item.FindControl("lblReason"); /* Output = Reason : (label reaseon) */
        Label lbldescription = (Label)item.FindControl("lblDescription"); /* Output = Description : (label Description) */
        TextBox txtOther = item.FindControl("testme") as TextBox; /* Output = textbox except reason and description */
        TextBox txtReason = item.FindControl("txtReason") as TextBox; /* Output = textbox on Reason */
        TextBox txtDescription = item.FindControl("txtDescription") as TextBox; /* Output = textbox on Description */
        CheckBox objName = item.FindControl("cbCountryName") as CheckBox; /* Output = Local, Internet, Email (nama access) */
        HiddenField objHD = item.FindControl("hd") as HiddenField; /* Output = Telpon, Business System (if deleted, nama jenis will be show up every single access name) */
        HiddenField subobjHD = item.FindControl("subhd") as HiddenField;
        HiddenField id_access = (HiddenField)item.FindControl("id_access");
        HiddenField id_jenis = (HiddenField)item.FindControl("idJenisAccess");
        HiddenField status = (HiddenField)item.FindControl("hdstatus");


        if (temp != objHD.Value)
        {                                                     
             if (objHD.Value=="Others" && id_access.Value == "ACT5")
             {
                 lblreason.Visible = true;
                 txtReason.Visible = true;
                 lbldescription.Visible = true;
                 txtDescription.Visible = true;
             }
             temp = objHD.Value;
             objLabel.Text = temp + "<br/>";
        }
        if (subtemp != subobjHD.Value)
        {
            subtemp = subobjHD.Value;
            subjenis.Text = subtemp+"<br/>";
        }
        if (status.Value == "1")
        {
            txtOther.Visible = true;                                
        }            
    }
}
我的问题是

如何将用户选中的所有
复选框
发送到其他web表单

例如:

当用户选中一些复选框并单击提交时,我会将选中的所有数据(如
id\u access
id\u jenis
)和textbox
(id=“testme”)
插入数据库

当用户单击“提交”按钮时,所有过程都将发生。当单击“提交”按钮时,我希望选中的
复选框中的所有数据都显示在另一个页面上(页面名称=“SendingActivation”)

比如“您选择:id\u access id\u jenis(输入)id\u access id\u jenis(输入)id\u access id\u jenis(与所选数据相同)


仅供参考:我也是c#编程新手,所以请一步一步地帮助我

他们有很多方法可以实现这一点

  • 应用程序变量
  • 会话变量
  • 响应。重定向
  • 厨师
  • 使用POST方法
应用程序变量

通过:

Application["id_access"] = "A0123";
Response.Redirect("SendingActivation.aspx?id_access="A0123");
HttpCookie id_access= new HttpCookie("Name");
id_access.Value="A0123"; 
访问:

string id_access = Application["id_access"].ToString();
  string id_access = Request.QueryString["id_access"];
string id_access= Request.Cookies["Name"].Value;
string id_access= Request.Form["ControlID"];
会话变量

分配:

Session["id_access"] = "A0123";
阅读:

 string id_access =  Session["id_access"];
响应。重定向

通过:

Application["id_access"] = "A0123";
Response.Redirect("SendingActivation.aspx?id_access="A0123");
HttpCookie id_access= new HttpCookie("Name");
id_access.Value="A0123"; 
访问:

string id_access = Application["id_access"].ToString();
  string id_access = Request.QueryString["id_access"];
string id_access= Request.Cookies["Name"].Value;
string id_access= Request.Form["ControlID"];
厨师

通过:

Application["id_access"] = "A0123";
Response.Redirect("SendingActivation.aspx?id_access="A0123");
HttpCookie id_access= new HttpCookie("Name");
id_access.Value="A0123"; 
访问:

string id_access = Application["id_access"].ToString();
  string id_access = Request.QueryString["id_access"];
string id_access= Request.Cookies["Name"].Value;
string id_access= Request.Form["ControlID"];
使用POST方法

通过:

Application["id_access"] = "A0123";
Response.Redirect("SendingActivation.aspx?id_access="A0123");
HttpCookie id_access= new HttpCookie("Name");
id_access.Value="A0123"; 
在源页面中的
按钮
控件中,在提交表单时发布值。将控件的
PostBackUrl
属性设置为要将ASP.NET网页发布到的页面的URL

访问:

string id_access = Application["id_access"].ToString();
  string id_access = Request.QueryString["id_access"];
string id_access= Request.Cookies["Name"].Value;
string id_access= Request.Form["ControlID"];

像这样更改InsertActivationDetail方法。我创建了一个字符串,在其中保存MaxActivationId。我假设在数据库中插入数据时MaxActivationId是唯一的。在下一页中,您将收到此id作为查询字符串,并根据MaxActivation id从数据库中获取数据,并在页面中显示它

private void InsertActivationDetail()
{
    //Mengambil nilai idActivation
    int MaxActivationId = GetGenerateActivationID();
    //
    string id = "";
    foreach (DataListItem objitem in DataListTest.Items)
    {

        /* To get data from the form , then insert into database */
        CheckBox cbCountryName = (CheckBox)objitem.FindControl("cbCountryName");
        HiddenField id_access = (HiddenField)objitem.FindControl("id_access");
        HiddenField id_jenis_access = (HiddenField)objitem.FindControl("idJenisAccess");
        TextBox txtOther = objitem.FindControl("testme") as TextBox;
        TextBox txtreason = objitem.FindControl("txtReason") as TextBox;
        TextBox txtdescription = objitem.FindControl("txtDescription") as TextBox;
        /* Get data end, then Inserting the data (below) */

        /*Check if datalist is null or not*/
        if (objitem != null)
        {
            /*if not nul, then check the checkboxes, is null or not*/
            if (cbCountryName.Checked == true)
            {
                /*if not null, then insert the data */
                conn.Open();
                sql = "INSERT INTO detil_activation (id_activation_access, id_jenis_access, id_access, " +
                     "keterangan, reason, description) " +
                     "VALUES ('" +
                     MaxActivationId + "', '" + id_jenis_access.Value + "', '" + id_access.Value + "','" +
                     txtOther.Text + "','" + txtreason.Text + "','" + txtdescription.Text + "')";
                SqlCommand cmd = new SqlCommand(sql, conn);
                cmd.ExecuteNonQuery();
                conn.Close();
                ids += MaxActivationId.ToString() + ",";
                /* Inserting data is done */
            }
        }
    }
    id = MaxActivationId.ToString();
    Response.Redirect("yourpage?maxID=" + id);
}

你想要其他页面上的所有数据,比如复选框和文本框的值,还是只想要复选框?你可以根据id_jenis_访问和id_访问从数据库中获取数据吗?是的,我可以获取id_jenis_访问和id_访问的数据,我想显示它。例如:用户检查2个类别中的3个访问(jenis_访问的名称)假设有2个类别。互联网和电话。类别互联网有3个访问权限,比如VPN、电子邮件、电子申请。类别电话有2个访问权限,比如本地、本地。在类别互联网上,用户检查电子邮件和类别telepon都已检查。在第2页中,“您应该选择电子邮件、本地、本地、本地”“就这样。明白吗?你的意思是,我应该在我的申请表上加上5个方法中的1个?在第一页还是第二页?我应该在哪里添加所有“访问”?新功能?还是在加载?而且,我的数据不是固定的。我的意思是,我不知道用户选择什么id_访问。那么我是如何动态地得到它的呢?你可以使用5个选项中的任何一个。分配/传递应该在第一页访问在重定向页中,数据呢?我的数据不像id\u access=“A0123”那样固定。无论用户在复选框上选择什么,它都必须是动态的。对于静态数据,如“A0123”,它不能是动态的。因为MaxActivationId在我的表中,所以可以重复。我需要id_访问和id_jenis_直接访问?我可以吗?正如您所说,用户可以根据需要选中任意多个复选框,因此所有id_访问和id_jenis_访问都将针对MaxActivationId保存。因此,您可以针对MaxActivationId获取所有选中的复选框。我的列表类似于此id_详细信息| id_激活|访问| id| jenis|u访问自动启动MaxActivationIdid_访问id_jenis ex:id_详情| id_激活| id_访问| id_jenis访问1 1 407 12 2 1 409 12 3 1 305 8 4 1 201 15类似那个我无法在注释中创建格式表。希望您理解将为单个MaxActivationId插入的所有数据,以便您可以从MaxActivationId中获取所有数据,该MaxActivationId是为复选框插入的。只需在SQl中运行查询,您就会得到结果。如果仍然有问题,请告诉我。是的,它起作用了。但是,如果数据大于1,现在如何在第2页上显示数据?