这会在点击<a href="" />
时显示患者详细信息页面(锚标签在转发器内):
function showPatient(Pid) {
RedirectToPage("Patient_Registration.aspx","pid="+Pid);
return false;
}
<asp:Repeater ID="repeaterPatientList" runat="server" OnItemDataBound="repeaterPatientList_ItemDataBound" >
<ItemTemplate>
<a href="#" onclick="return showPatient('<%#Eval("PID") %>')"><%#Eval("Patient_Name")%></a>
</ItemTemplate>
</asp:Repeater>
我在患者详情页面上将pID
作为查询字符串。在第一页上加载pID
后,患者信息将填充到相应的文本字段中。但是,当我单击保存按钮时,pID
将丢失 - 将值设为0,以便始终触发插入查询。
int pID;
protected void Page_Load(object sender, EventArgs e)
{
pID = Convert.ToInt32(Request["pid"]);
if (pID != 0)
{
if (IsPostBack == false)
{
FillPatientInfo(pID);
}
}
}
protected void btnSave_Click(object sender, EventArgs e)
{
if(pID ==0)
{
//insert query code
}
else
{
//update query code
}
}
答案 0 :(得分:1)
您必须在保存按钮中再次获得pid。您正在postback == false的查询字符串中设置pid的值。因此,当单击“保存”按钮时,它会回发,因此查询字符串中的pid值未分配给类变量pid。
也使用Request.QueryString [“pid”]而不是Request [“pid”]
protected void btnSave_Click(object sender, EventArgs e)
{
pID = Convert.ToInt32(Request.QueryString["pid"].ToString());
if(pID ==0)
{
//insert query code
}
else
{
//update query code
}
}
答案 1 :(得分:0)
您没有使用QueryString - JavaScript RedirectToPage()方法中的代码读取QueryString并将其作为表单元素输出,然后提交到目标页面。
第一次运行正常但是一旦页面回发,该值就会丢失,所以这种行为是正确的。
您应该将值存储在某个位置(ViewState,Session等)或向页面添加HiddenField并在首次加载时填充它,然后在回发时可以从HiddenField中提取值。
修改强>
要进入隐藏字段路径,请将控件添加到ASPX页面中,如下所示
<asp:HiddenField runat="server" ID="hidField" />
然后像这样改变你的PageLoad
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
pID = Convert.ToInt32(Request["pid"]);
if(pID != 0)
{
FillPatientInfo(pID);
hidField.Value = pID;
}
}
else
{
pID = Convert.ToInt32(hidField.Value);
}
}