1

私の .NET スキルはそれほど高くありませんが、ちょっとした問題に悩まされており、これを理解できる方法で説明するものが見つかりません。基本的に、CMS からの現在の値をフォームに事前入力し、フォームが送信されたときにそれらの値を更新できるようにしようとしています。これは基本的に、Web サイトの一部の「編集」機能にすぎません。

次のようなフォーム入力を含むユーザーコントロールがあります。

<label for="">Raised by</label>
<asp:TextBox ID="RaisedBy" runat="server"></asp:TextBox>

次に、CMS から値を取得し、このレコード用に既に保存されている値をこのフォームに入力するコード ビハインド ページを次のように作成します。

protected void Page_Load(object sender, EventArgs e)
{
    // ...Some logic here gets the node from the CMS and I can pull property values from it.  This part works fine.
    string raisedBy = node.GetProperty("raisedBy").ToString();

    // Populate form input with value from CMS. This works.
    RaisedBy.Text = raisedBy;
}

だからこれでいい。ただし、フォームが送信されると、次のコードが呼び出されます。

protected void edit_Click(object sender, EventArgs e)
{
    if (Page.IsValid)
    {
        // Get edited value of input field
        string RaisedByVal = RaisedBy.Text;

        // Do some logic here to set up the CMS to be able to save the property - this works although it uses the original value of the form not the modified value if the user has changed it.
        pageToEdit.getProperty("raisedBy").Value = RaisedByVal;
    }
}

問題は、ユーザーが値を編集した場合に、変更された値ではなく、元のフォーム値がシステムに保存されることです。

私が間違っていることと、元の値ではなく変更された値を使用する方法を誰かが提案できますか?

どうもありがとう。

4

2 に答える 2

1

Page_Load() メソッドでポストバックかどうかを確認する必要があります。

したがって、これを行わないと、編集ボタンをクリックすると、最初に Page_Load() が呼び出され、元の値が再びリセットされます。後で Edit クリック メソッドが呼び出され、元のデータが引き続き表示されます。

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            // ...Some logic here gets the node from the CMS and I can pull 
            property values from it.  This part works fine.
            string raisedBy = node.GetProperty("raisedBy").ToString();

            // Populate form input with value from CMS. This works.
            RaisedBy.Text = raisedBy;
        }
    }
于 2013-05-13T12:42:09.840 に答える