1

我有一个中继器,它绑定到从 XML 文件生成的 List<>。该文件由两个节点组成,ID 和 Item。

<Items><ID>0</ID>
<Item><![CDATA[<a target='blank' href="http://www.cnn.com">CNN News</a> ]]></Item>

我需要提供编辑功能以允许用户编辑转发器中每个项目的 url 和文本。我不想为每一行单独的编辑/保存按钮;太杂乱了。我想这意味着一个编辑/保存按钮,这基本上会导致在每次保存时重新“创建”XML文件。或者,是否有更好的方法来做到这一点?

我想我在问两件事:

  1. 关于如何使 URL 列表可编辑(包括 url 和文本)的设计建议。我猜是两个单独的文本框?

  2. 如何处理编辑。

谢谢。

4

1 回答 1

1
  1. 是的,两个单独的字段是去这里的方式
  2. 就编辑而言,您的ItemTemplate. 一个用于View,一个用于Edit。默认情况下,编辑面板的可见性设置为 false。每行都有一个“编辑”按钮,其中项目的 ID 为其CommandArgument,按下该按钮时,您将设置一个带有所单击项目 ID 的 Session 变量。然后,当您重新绑定中继器时,您会根据会话编辑 ID 变量检查每个项目的 ID。如果它们匹配,则将View面板的可见性设置为 false,并将Edit面板的可见性设置为 true。编辑_面板有两个按钮,一个用于保存,一个用于取消。一旦用户单击 Save 或 Edit,您就可以进行任何后端处理,清除 Session 变量并重新绑定转发器。尽管有内置控件具有“内置”编辑功能,但我发现使用中继器分配给我的控件更出色。

这个方法我用过很多次了,效果很好!

如果您需要任何代码来说明上述任何一点,请随时提出。

另一方面,您的 XML 看起来有点奇怪。似乎没有代表每个 URL/ID 对的父节点。这是一个疏忽,一个错字,还是我在这里遗漏了什么?

编辑:

这是在您的场景中利用 ViewState 的好方法:

    private enum PageStates
    {
        None = 0,
        View = 1,
        Edit = 2
    }

    /// <summary>
    /// The current state of the page
    /// </summary>
    private PageStates PageState
    {
        get
        {
            if (ViewState["PageState"] == null)
                ViewState["PageState"] = PageStates.View; //default to view state

            return (PageStates)ViewState["PageState"];
        }
        set
        {
            ViewState["PageState"] = value;
        }
    }

通过将 ViewState 访问封装在一个属性中,对存储变量(Session、DB 等)的方法的任何更改都会从访问它的任何代码中抽象出来。

于 2013-01-28T17:14:49.377 回答