一键将所有值从一个页面传递到另一个页面
本文关键字:一个 另一个 一键 | 更新日期: 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();
}
也许您可以使用以下方法之一:
- 将来自页面 A 的更改存储到数据源(即数据库),然后重定向到页面 B 并提供对象标识符作为第二个页面查询字符串参数,最后再次加载目标对象。例如:
// This is your source page
Response.Redirect("EnquiryMaintenance.aspx?objectId=" + someObjectId);
// This is your target page
string objectId = Request.QueryString["objectId"];
- 将整个对象
- 按原样或以序列化格式(如 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>