問題
<asp:TextBox>
は更新されていません。
背景
というページがありますAdd_Edit_Drugs.aspx
。このページには、次の2つの方法のいずれかでアクセスできます。ユーザーがAdd Drug
ボタンをクリックすると、Response.Redirect("Add_Edit_Drugs.aspx")
コマンドが実行されます。または、ハイパーリンクをクリックすると、次のように同じページに移動します。
<asp:HyperLinkField
DataNavigateUrlFields="Drug_INDEX"
DataNavigateUrlFormatString="Add_Edit_Drugs.aspx?Drug_INDEX={0}"
DataTextField="Drug_Name"
HeaderText="Drug Name"
/>
イベントはクエリ文字列のPage_Load
存在をチェックし、存在する場合はデータベース内の情報をフィールドに入力します。存在しない場合は、空白のままにします。
protected void Page_Load(object sender, EventArgs e)
{
if (Request.QueryString["Drug_INDEX"] != null)
{
String sIndex = Request.QueryString["Drug_INDEX"].ToString();
if (!Int32.TryParse(sIndex, out Drug_INDEX)) //Query String not a valid index
{
errorMessage.Text = "There was an error retrieving the record.";
message.Text = "Please contact you IT administrator.";
}
else
{
Drug_IO dio = new Drug_IO();
SqlDataReader drugDataReader = dio.Get_Drug(Drug_INDEX);
if (drugDataReader.Read())
{
drugNameTxt.Text = drugDataReader["Drug_Name"].ToString();
descriptionTxt.Text = drugDataReader["DrugDescription"].ToString();
toxTxt.Text = drugDataReader["Toxicity"].ToString();
hlTxt.Text = drugDataReader["HalfLife"].ToString();
hlUnitsTxt.Text = drugDataReader["HalfLife_Units"].ToString();
bindingTxt.Text = drugDataReader["ProteinBinding"].ToString();
logPTxt.Text = drugDataReader["LogP"].ToString();
molecularWeightTxt.Text = drugDataReader["MolecularWeight"].ToString();
molecularFormTxt.Text = drugDataReader["MolecularFormula"].ToString();
chemicalForumlaTxt.Text = drugDataReader["ChemicalFormula"].ToString();
}
}
}
}
それから私は私のsaveBtn_Click
方法を持っています:
protected void saveBtn_Click(object sender, EventArgs e)
{
double halfLife;
if (!Double.TryParse(hlTxt.Text, out halfLife))
halfLife = Double.NaN;
double logP;
if (!Double.TryParse(logPTxt.Text, out logP))
logP = Double.NaN;
double moleWeight;
if (!Double.TryParse(molecularWeightTxt.Text, out moleWeight))
moleWeight = Double.NaN;
if (-1 == Drug_INDEX) // New record to be inserted
{
Drug_Record dr = new Drug_Record(
drugNameTxt.Text,
descriptionTxt.Text,
toxTxt.Text,
halfLife,
hlUnitsTxt.Text,
bindingTxt.Text,
logP,
moleWeight,
molecularFormTxt.Text,
chemicalForumlaTxt.Text);
if (dr.saveToDataBase())
{
Response.Redirect("List_Drugs.aspx");
}
else
{
message.Text = "An error occured saving the record.";
errorMessage.Text = "Please contact your system admin.";
}
}
else //record already exists in db, needs to be updated
{
Drug_Record dr = new Drug_Record(
drugNameTxt.Text,
descriptionTxt.Text,
toxTxt.Text,
halfLife,
hlUnitsTxt.Text,
bindingTxt.Text,
logP,
moleWeight,
molecularFormTxt.Text,
chemicalForumlaTxt.Text,
Drug_INDEX);
if (dr.updateRecord())
{
Response.Redirect("List_Drugs.aspx");
}
else
{
message.Text = "An error occur updating the record.";
errorMessage.Text = "Please contact your system admin.";
}
}
}
さて、ご想像のとおり、私のelse //record already exists
ブロックでは、ユーザー編集から(おそらく)新しい値を取得すると、実際に取得するのは、データベースから取得した元の情報です。私が読んだことから、問題はかどうかの問題にあることがわかりますPage.IsPostBack
。チェックインしましたPage_Load
。チェックインしましたsaveBtn_Click
。新しいレコードを作成する前にチェックし、レコードを更新する前にチェックしました。私はそれらすべてを組み合わせました。私はそれらを反転させました。私が何を試しても、次の2つのいずれかが発生します。
- 古い情報を入手します。
- 何もない。
この特定の問題は、実際にはより大きな問題の症状です。私は(ちょっと)aが何であるかPostBack
は理解していますが、何が原因であるかは実際には理解していません。この場合、PostBackの原因は何ですか?いつ確認する必要がありますか?