一键将所有值从一个页面传递到另一个页面

本文关键字:一个 另一个 一键 | 更新日期: 2023-09-27 18:35:30

我有一个数据列表,位于Emailenquiries.aspx页面中,我想将这些被修改的数据列表值放入另一个名为Querymaintenance.aspx的页面中。

这是我的代码

电子邮件查询.aspx(我只是将值缩小到三个)

<asp:DataList ID="DataList1" runat="server" DataKeyField="PD_ID" OnItemCommand ="DataList1_OnItemCommand" DataSourceID="sdsEnquiries">
                <ItemTemplate>
                    <h2>Enquiry details</h2>
                    <ul class="left patientInfo">
                        <li>
                            <label>Title</label>
                            <asp:Label ID="PD_TitleLabel" runat="server" Text='<%# Eval("PD_Title") %>' />
                        </li>
                        <li>
                            <label>First Name</label>
                            <asp:Label ID="PD_FirstNameLabel" runat="server" Text='<%# Eval("PD_FirstName") %>' />
                        </li>
                        <li>
                            <label>Last Name</label>
                            <asp:Label ID="PD_LastNameLabel" runat="server" Text='<%# Eval("PD_LastName") %>' />
                        </li>
                        <li>
</ul>
</ItemTemplate>
 <asp:Button ID="Button1" runat="server" Text="Promote as Enquiry" CommandName ="PromoteAsEnquiry" OnClick="btnPromote_Click" CssClass="htmlbutton" />

电子邮件查询.aspx.cs

    protected void DataList1_OnItemCommand(Object sender, DataListCommandEventArgs e)
    {
        if (e.CommandName == "PromoteAsEnquiry")
        {                
            DataListItem row = DataList1.Items[e.Item.ItemIndex];
            DropDownList ddlTitle = (DropDownList)row.FindControl("PD_TitleLabel");
            Label lblFirstName = (Label)row.FindControl("PD_FirstNameLabel");
            Label lblLastName = (Label)row.FindControl("PD_LastNameLabel");
            Session["title"] = ddlTitle.Text;
            Session["firstname"] = lblFirstName.Text;
            Session["lastname"] = lblLastName.Text;
            Response.Redirect("EnquiryMaintenance.aspx");            
        }

    }

查询维护.aspx.cs

protected void Page_Load(object sender, EventArgs e)
{                   
    EM_ddlTitle.Text = Session["title"].ToString();
    lblEM_FirstName.Text = Session["firstname"].ToString();
    lblEM_LastName.Text = Session["firstname"].ToString();                         
}

一键将所有值从一个页面传递到另一个页面

也许您可以使用以下方法之一:

  1. 将来自页面 A 的更改存储到数据源(即数据库),然后重定向到页面 B 并提供对象标识符作为第二个页面查询字符串参数,最后再次加载目标对象。例如:

// This is your source page
Response.Redirect("EnquiryMaintenance.aspx?objectId=" + someObjectId);
// This is your target page
string objectId = Request.QueryString["objectId"];
    将整个对象
  1. 原样或以序列化格式(如 JSON)存储在内存中,并从第二页访问整个对象。这是个坏主意,因为网站是一个多线程、多用户的客户端-服务器应用程序,如果打开的用户会话过多,这种方法会占用服务器 RAM。您也可以将对象序列化到存储区(同样,例如数据库),但是如果可以获得正确的对象,为什么要存储虚拟对象(请参阅方法 1)?

我认为最好的方法是,因为您已经使用了数据源,因此将所选字段的键作为查询字符串传递(如果应该隐藏,则作为发布请求传递),并在另一页上使用相同的数据源,排除过滤器通过参数。

这样,如果将来对结构进行更改,则不应更改任何内容(除非数据源未采用所有值,否则应在此处添加字段)。

不要忘记在查询维护.aspx中验证参数!

我正在尝试第一种方法:

我创建了一个新的sqldatasource来传递id(newid),如下所示:

电子邮件查询.aspx

  <asp:SqlDataSource ID="SqlDataSource1" runat="server"ConnectionString="<%$ ConnectionStrings:myConnectionString %>" SelectCommand="SELECT * FROM [tbl_PatientDetails_PD]LEFT JOIN [tbl_MakeAppointment_MA] ON [tbl_PatientDetails_PD].[PD_ID] = [tbl_MakeAppointment_MA].[MA_PD_ID]  LEFT JOIN [tbl_ChangeAppointment_CHA] ON [tbl_PatientDetails_PD].[PD_ID] = [tbl_ChangeAppointment_CHA].[CHA_PD_ID] LEFT JOIN [tbl_CancelAppointment_CA] ON [tbl_PatientDetails_PD].[PD_ID] = [tbl_CancelAppointment_CA].[CA_PD_ID] WHERE ([PD_ID] = @PD_ID)">
                <SelectParameters>
                    <asp:ControlParameter ControlID="lblEM_ID" Name="PD_ID" PropertyName="Text" 
                        Type="Int32" />
                </SelectParameters>
            </asp:SqlDataSource>

lblEM_ID设置为不可见:

<asp:Label ID="lblEM_ID" runat="server" Visible="False"></asp:Label>

电子邮件查询.aspx.cs

 protected void btnPromote_Click(object sender, EventArgs e)
        {
            Response.Redirect("EnquiryMaintenance.aspx?newid=" + lblEM_ID.Text);
        }

查询维护.aspx.cs

if(!Page.IsPostBack)
            {
                string objectId = Request.QueryString["newid"];
}

收件人: Soner Gönül

我正在尝试做的是将所有值传递给查询维护.aspx页面。我需要推广我从电子邮件查询收到的查询(数据.aspx并将另一个数据添加到数据库中。我使用以下代码测试了我的代码:

protected void Page_Load(object sender, EventArgs e)
    {
      //  lblEM_Title.Text = Session["Title"].ToString();
        if (Session["firstname"] != null)
        {
            EM_ddlTitle.Text = Session["title"].ToString();
            lblEM_FirstName.Text = Session["firstname"].ToString();
            lblEM_LastName.Text = Session["firstname"].ToString();                
        }
        else {
            Label2.Text = "ERROR";
        }

}

我试图传递"名字",但我收到错误,这意味着数据不是从电子邮件查询.aspx页面传递的。

致:马蒂亚斯·菲德姆雷泽

我尝试了这种方法..因为我需要为每个新查询创建一个新id..但它不起作用:

在电子邮件查询中.aspx.cs

Response.Redirect("EnquiryMaintenance.aspx?newid=" + lblEM_ID.Text);

在电子邮件查询中.aspx

<asp:Label ID="lblEM_ID" runat="server" Visible="False"></asp:Label>