我有一个绑定到List<>的转发器从XML文件生成。该文件由两个节点ID和Item组成。
<Items><ID>0</ID>
<Item><![CDATA[<a target='blank' href="http://www.cnn.com">CNN News</a> ]]></Item>
我需要提供编辑功能,以允许用户编辑转发器中每个项目的URL和文本。我不希望每行都有单独的编辑/保存按钮;太杂乱了。我想这意味着单个编辑/保存按钮,这实际上会导致XML文件在每次保存时重新“创建”。或者,可能有更好的方法来做到这一点吗?
我想我要问两件事:
关于如何使URL列表可编辑(网址和文本)的设计建议。我猜两个单独的文本框?
如何处理修改。
感谢。
答案 0 :(得分:1)
ItemTemplate
设置两个面板。一个用于查看,另一个用于修改。默认情况下,修改面板的可见性设置为false。每行都有一个“编辑”按钮,项目的ID为CommandArgument
,按下后,您可以设置一个会话变量,其中包含项目的ID。然后,当您重新绑定转发器时,将根据会话编辑ID变量检查每个项目的ID。如果匹配,则将查看面板的可见性设置为false,将编辑面板的可见性设置为true。 修改面板有两个按钮,一个用于保存,另一个用于取消。用户单击“保存”或“编辑”后,执行任何后端处理,清除“会话”变量并重新绑定转发器。虽然内置的控件具有“内置”编辑功能,但我发现使用Repeater的控件非常出色。我已多次使用此方法,效果很好!
如果您需要任何代码来说明上述任何一点,请随时提出。
作为一方,你的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访问权限,对存储变量(会话,数据库等)的方法的任何更改都将从访问它的任何代码中抽象出来。