【问题标题】:Edit items (hyperlinks) in a repeater with a single edit button使用单个编辑按钮在转发器中编辑项目(超链接)
【发布时间】:2013-01-29 06:35:29
【问题描述】:

我有一个转发器,它绑定到从 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. 如何处理编辑。

谢谢。

【问题讨论】:

    标签: c# xml web repeater edit


    【解决方案1】:
    1. 是的,两个单独的字段是这里的方式
    2. 就编辑而言,您可以为ItemTemplate 设置两个面板。一个用于查看,一个用于编辑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 等)的方法的任何更改都会从任何访问它的代码中抽象出来。

    【讨论】:

    • 谢谢谢。我试图避免每行都有一个编辑按钮,并且每次编辑都需要单独点击。按钮太多,点击次数太多。
    • 而且,我的 XML 有一个 父节点。 `0cnn.com">CNN</a> ]]>投资组合>
    • 所以您想要一个打开所有行的编辑功能的按钮,以及一个保存所有行的保存按钮?如果是这种情况,您仍然可以使用我建议的模式,只是没有会话 ID 变量。您可以使用页面级 ViewState 变量来确定页面处于“编辑”或“视图”的状态。这符合您的要求吗?
    • 是的,一键两用。我将研究 ViewState,因为我以前从未使用过它。
    • ViewState 变量是页面级变量,存储在页面上的ViewState 中。我已经更新了我的答案,向您展示了一个实施示例。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-24
    相关资源
    最近更新 更多