使用单个编辑按钮在转发器中编辑项目(超链接)



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

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

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

我想我在问两件事:

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

  2. 如何处理编辑。

谢谢。

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

我已经多次使用这种方法,效果很好!

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

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

编辑:

这是在方案中利用视图状态的好方法:

    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 访问封装在属性中,对存储变量的方法(会话、DB 等)所做的任何更改都将从访问它的任何代码中抽象出来。

最新更新