1

我的 .NET 技能不是很好,但我被一个小问题难住了,我找不到任何能以我理解的方式解释这一点的东西。基本上,我正在尝试使用来自 CMS 的当前值预填充表单,并在提交表单时更新这些值。它本质上只是网站一部分的“编辑”工具。

我有一个用户控件,其中包含一些这样的表单输入:

<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() 方法中检查它是否是 Postback:

因此,如果您不这样做,那么在编辑按钮上单击它将第一次调用 Page_Load() 并再次重置原始值。稍后它会调用 Edit click 方法,你仍然会看到原始数据。

    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 回答
0

通常我在发布后立即找到答案!:)

我需要将“预填充表单值”逻辑包装在:

if (!IsPostBack)
{
}

堵塞。

于 2013-05-13T12:36:08.410 回答