我正在制作一个包含大量用户控件的表单,每个用户控件都是表单的一部分(包含TextBox,ComboBox等)。
用户将使用该表单更新其信息。 在提交结束时,我需要显示原始数据和用户输入的数据。
我想知道是否可以将输入控件(TextBox等)替换为Label? 所以我可以简单地使用相同的用户控件,然后将每个输入控件转换为标签以显示数据...(我只是不想使用readonly或禁用)
注意:我使用不同的数据集来映射每个用户控件数据....
我想要做的就是从Page.Controls获取输入控件:
aInputControl = new Label();
...或
Page.Controls.Remove(aInputControl);
然后以某种方式在页面中的相同位置添加新Label ... 但是我不知道怎么......除了添加另一个div来围绕每个控件之外什么都不会想到...
我只是想知道这是否可能......
提前致谢。
=====
编辑:似乎让新用户控制对我来说不是一个好方法....我会尝试以某种方式将每个原始数据和新数据映射到一个新的用户控件,并将它们写入页面...但是无论如何,谢谢你的想法。
答案 0 :(得分:3)
您可以创建一个包含TextBox和Label的自定义用户控件,并根据它是否有值显示其中一个。
答案 1 :(得分:2)
我会创建一个用户控件或Web控件来封装该功能。添加属性以更改显示模式和控件中的某些逻辑,以确定要显示的控件。
以下是一个代码示例,可以为您提供一个想法,如果您愿意,我可以对此进行扩展。
public class ReadOnlyControl<T> : WebControl where T : Control, ITextControl {
protected T inputControl;
protected Label lblLabel;
public bool IsReadOnly { get; set; }
public string Text { get; set; }
protected override void Render(HtmlTextWriter writer) {
Control control = IsReadOnly ? lblLabel : (Control)inputControl;
((ITextControl)control).Text = Text;
control.RenderControl(writer);
}
}
答案 2 :(得分:0)
您可能想重新考虑您的设计。我建议您有另一个视图/页面,在提交后显示数据摘要。此外,您可以通过这种方式更好地控制格式。我不想听起来居高临下,但听起来你有点懒惰。