【问题标题】:Is it possible to convert input control to label?是否可以将输入控件转换为标签?
【发布时间】:2011-03-11 17:59:05
【问题描述】:

我正在制作一个包含很多用户控件的表单,每个用户控件都是表单的一部分(包含 TextBox、ComboBox 等)。

用户将使用该表格来更新他们的信息。 在提交结束时,我需要显示原始数据和用户输入的数据。

我想知道是否可以将输入控件(文本框等)替换为标签? 所以我可以简单地使用相同的用户控件,然后将每个输入控件转换为标签以显示数据...(我只是不想使用只读或禁用)

注意:我使用不同的数据集来映射每个用户控件数据....

我想做的就是从 Page.Controls 获取输入控件:

aInputControl  = new Label();

或者...

Page.Controls.Remove(aInputControl);

然后以某种方式在页面的相同位置添加新标签... 但是我不知道怎么...除了添加另一个div来包围每个控件之外什么都想不到...

我只是想知道这是否可能......

提前致谢。

=================

编辑:似乎制作新的用户控件对我来说不是一个好方法......我会尝试以某种方式将每个原始数据和新数据映射到一个新的用户控件中,并将它们写入页面......但是无论如何,谢谢你的想法。

【问题讨论】:

    标签: c# asp.net


    【解决方案1】:

    您可以制作包含 TextBox 和 Label 的自定义用户控件,并根据它是否具有值来显示其中一个或另一个。

    【讨论】:

    • 但我一直在使用其他公司的组件作为我所有的输入控件,TextBox、MaskedTextBox、ComboBox、DatePicker 等......我想知道我是否有可能无法从他们的控制中继承...... .?
    • 你应该可以继承 - 检查类是否被密封。
    • 但是来自 .... link 它说不能从另一个用户控件继承..
    • 对不起 - 我不是说从 UserControl 继承。我的意思是创建一个由其他两个控件(对象组合)组成的新用户控件。然后,在该 UserControl 内部,您可以切换显示哪一个。
    • 我已经完成了 skaz 所说的,通过实现一个属性来跟踪页面所处的“模式”(查看、编辑、更新等)并根据模式显示控件。
    【解决方案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);
        }
    
    }
    

    【讨论】:

    • hmm 我想知道这段代码将如何适合我的设计......所以我将在我的 asp 文件中用 ReadOnlyControl 替换我的所有输入控件?有点想知道如何在 asp 文件中编写 ..
    • 我不记得我以前是怎么做的了,但保持语法简洁的最简单方法可能是对这个类进行子类化。即TextBoxReadOnly : ReadOnlyControl&lt;TextBox&gt;
    【解决方案3】:

    您可能需要重新考虑您的设计。我建议您在提交后使用另一个视图/页面来显示数据摘要。此外,您可以通过这种方式更好地控制格式。我不想听起来居高临下,但听起来你有点懒惰。

    【讨论】:

    • 因为我不知道以后需要什么样的输入数据,我只被告知会有更多的问题和调查(就像很多页面一样)添加到论坛中,如果我制作另一个视图页面将需要双倍的工作。此外,我希望足够灵活,通过放置不同的用户控件来自定义页面。
    • 实际上,几年前我在 ASP.NET WebForms 中创建了一个调查应用程序,并且完全按照您的要求进行了操作 - 除了我只是禁用了控件(您说您不想这样做)。然而,最近我决定用 MVC 重写这个应用程序,我发现在“详细信息”视图中以纯文本形式迭代问题和响应比尝试回收“编辑”视图来显示数据要容易得多。相信我,它会让你的生活轻松很多。
    • 实际上我只是遍历了所有问题(约束输入控件的用户控件),使用他们的 ID 找到他们的原始数据和用户刚刚输入的数据,然后将它们写到页面上HTML。谢谢分享经验~
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-11
    • 2014-10-12
    • 2011-01-01
    • 2014-10-03
    • 2019-02-09
    • 2023-01-11
    • 1970-01-01
    相关资源
    最近更新 更多