-1

单击时会显示患者详细信息页面<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
    }
}
4

2 回答 2

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
  }

}
于 2012-04-25T11:55:35.420 回答
0

您没有使用 QueryString - JavaScript RedirectToPage() 方法中的代码读取 QueryString 并将其作为表单元素输出,然后提交到目标页面。

这第一次工作正常,但一旦页面回发,值就会丢失,所以这种行为是正确的。

您应该将值存储在某处(ViewState、Session 等)或将 HiddenField 添加到页面并在第一次加载时填充它,然后在回发时您可以从 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);
        }
    }
于 2012-04-25T12:23:21.770 回答