-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["pid"]の代わりにRequest.QueryString["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を使用していません。JavaScriptRedirectToPage()メソッドのコードは、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);
        }
    }
于 2012-04-25T12:23:21.770 に答える