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

时间:2013-01-28 02:43:24

标签: c# xml web repeater edit

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

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

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

我想我要问两件事:

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

  2. 如何处理修改。

  3. 感谢。

1 个答案:

答案 0 :(得分:1)

  1. 是的,这里有两个不同的字段
  2. 就编辑而言,您可以为ItemTemplate设置两个面板。一个用于查看,另一个用于修改。默认情况下,修改面板的可见性设置为false。每行都有一个“编辑”按钮,项目的ID为CommandArgument,按下后,您可以设置一个会话变量,其中包含项目的ID。然后,当您重新绑定转发器时,将根据会话编辑ID变量检查每个项目的ID。如果匹配,则将查看面板的可见性设置为false,将编辑面板的可见性设置为true。 修改面板有两个按钮,一个用于保存,另一个用于取消。用户单击“保存”或“编辑”后,执行任何后端处理,清除“会话”变量并重新绑定转发器。虽然内置的控件具有“内置”编辑功能,但我发现使用Repeater的控件非常出色。
  3. 我已多次使用此方法,效果很好!

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

    作为一方,你的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访问权限,对存储变量(会话,数据库等)的方法的任何更改都将从访问它的任何代码中抽象出来。