页面回发后查询字符串值丢失

时间:2012-04-25 11:51:27

标签: c# asp.net

这会在点击<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
    }
}

2 个答案:

答案 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);
        }
    }