0

私はすべてのinput type="text" with runat="server" というフォームを持っているので、コードビハインドがそれを見ることができ、ユーザーはデータを入力し、リストから選択した場合は後で同じデータを編集できます。編集用にフォームにデータを入力した後 (問題なく動作します)、ユーザーは任意のフィールドを変更して [送信] をクリックできます。コードは正常に機能しますが、何も更新されていないことに気付きました。

コードをデバッグすると、フィールドに新しいテキストを入力したにもかかわらず、編集するレコードを選択したときにフィールドに入力された元のテキストがまだ送信されていることがわかりました。

また、javascript を介してフィールドを見ると、現在のテキストがフィールドに反映されますが、コード ビハインドでは、最初に割り当てられたものが表示されます。

コード:

データ呼び出しからのフィールドのロード:

protected void LoadForm(int detailId)
{
    List<Event> e = ado.GetEventDetails(detailId);
    txtEventName.Value = e[0].eventName;
    txtSponsOrg.Value = e[0].sponsOrg;
    txtSponsOrgContactName.Value = e[0].sponsOrgContactName;
    txtVenueName.Value = e[0].venueName;
    txtStreetAddress.Value = e[0].venueAddress;
    txtCity.Value = e[0].venueCity;
    txtState.Value = e[0].venueState;
    txtZip.Value = e[0].venueZip;
}

クリック イベント:

protected void SubmitForm_Click(object sender, EventArgs e)
{
    SendCreateEvent();
}

以下は、テキストボックスに現在のデータを表示することになっています。デバッグすると、フィールドに新しいテキストを入力したかどうかに関係なく、上記のメソッドからロードされたボックスに元のテキストが表示されます。

private void SendCreateEvent()
{
    //get user info
    SessionManager sm = new SessionManager();
    int userId = sm.UserApplicationID;
    string userName = sm.UserLoginName;
    string userFName = sm.UserFirstName;
    string userLName = sm.UserLastName;
    string userEmail = sm.UserEmailAddress;

    //assign form field variables
    string eventName = txtEventName.Value;
    string sponsOrg = txtSponsOrg.Value;
    string sponsOrgContact = txtSponsOrgContactName.Value;
    string venueName = txtVenueName.Value;
    string venueAddress = txtStreetAddress.Value;
    string venueCity = txtCity.Value;
    string venueState = txtState.Value;
    string venueZip = txtZip.Value;
    string detailId = Session["DetailId"].ToString();

    ado.CreateEvent(detailId, userId, userName, userFName, userLName, userEmail, 
                    eventName, sponsOrg, sponsOrgContact, venueName, venueAddress,
                    venueCity, venueState, venueZip)
}

edit Page Load メソッド (リクエスト):

protected void Page_Load(object sender, EventArgs e)
{
  txtApprovedDate.Attributes.Add("readonly", "readonly");
  txtEventDate.Attributes.Add("readonly", "readonly");
  txtEventTimeStart.Attributes.Add("readonly", "readonly");
  txtEventTimeEnd.Attributes.Add("readonly", "readonly");
  int detailId = 0;
  string loadForm = Session["LoadForm"].ToString();
  if (Session["DetailId"].ToString() != "")
  {
    detailId = Convert.ToInt32(Session["DetailId"]);
  }
  if (loadForm == "true")
  {
    LoadForm(detailId);
  }
}
4

1 に答える 1

2

回答(コメントから取得):

おそらく、テキスト フィールドのデータを再バインドしていて、チェックしていないif(!IsPostback)ため、LoadFormメソッドに到達するまでに、データはデータ バインド ロジックによって既に上書きされています。

于 2013-08-13T19:34:39.543 に答える