【问题标题】:Creating dynamic UI in ASP.NET web forms在 ASP.NET Web 表单中创建动态 UI
【发布时间】:2011-12-06 12:50:34
【问题描述】:

我需要创建一个从数据库读取的具有以下结构的调查页面。

Survey QuestionA
a) Answer1 [Radio button]
b) Answer2 [Radio button]
c) Answer3 [Radio button]
d) Answer4 [Radio button]

repeats..

页面有很多问题需要动态添加。我需要将表单的结果存储在提交时的 Question 对象数组中。 我知道的一种方法是在表中创建动态 UI 并通过FindControl 获取值。 有没有更好(优雅)的方法来做到这一点?

【问题讨论】:

  • 几周前我遇到了同样的问题,提交页面后不得不递归找到相应的控件;我也想知道是否有更优雅的方式:)
  • 我相信您还需要在回发时重新创建 UI。
  • 我最近回答了一个有点类似的问题here

标签: c# asp.net .net webforms


【解决方案1】:

在 ASP.Net MVC 中,它使用默认模型绑定器为您处理繁琐的工作。当然你也可以创建你自己的。虽然这并没有为您提供您希望在 ASP.Net Web 窗体中获得的自动解决方案,但在这种情况下,我的偏好是遵循 ASP.Net MVC 用于其命名约定的类似常见模式,从而简化它。然后,您可以开始编写可以随时间重复使用的代码。这是 Haack 博客上解释命名约定的文章的链接 http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx.

长期推荐来ASP.Net MVC,生活在这里更好:)

【讨论】:

    【解决方案2】:

    我建议创建一个 userconrol 来实现问题(标签)和答案(单选按钮),并且每个控件(标签、单选按钮)都绑定到您的 属性 usercontrol,然后您可以从数据库中读取问题,并为每个数据创建此 usercontrol object 并将相应的数据设置为 usercontrol 的该属性,并从该状态的控件中读取数据,反之亦然。

    尽管您必须在每次回发中重新创建用户控件并将默认数据设置为这些。

    您还可以使用不同的用户界面创建多个用户控件,这些用户控件继承了一个界面,例如IQuestion,以及一个工厂 创建每个用户控件的类取决于环境变量。

    【讨论】:

    • +1 同意。在 DOM 中查看数据是一场性能噩梦。
    • @Craig 我的意思是“无论你如何实现,都不要考虑切换到客户端代码进行数据检索”。好吧,也许这不是很清楚,我的错。
    • @alex 对不起,亚历克斯,我没有看到那个答案。感谢您指出了这一点。我删除了我的评论以避免任何混淆。干杯!
    【解决方案3】:

    您可以使用 jQuery 通过选中的属性获取选定的单选按钮,并将它们附加到问题编号。 例如对于问题 1,您有

    因此,您可以像这样通过单选按钮获取值: $("input[type='radio']").checked

    【讨论】:

      【解决方案4】:

      您始终可以通过编程方式添加控件。

      假设您有一个可以执行的 aspnet 面板控件...

      RadioButton rb = new RadioButton();
      rb.ID = "rbRadioButton";
      rb.Name = "rbRadioButton";
      rb.cssClass = "radioClass";
      Panel1.Controls.Add(rb);
      

      请原谅这个例子的苛刻,目前没有视觉工作室来检查它,但我希望你明白这个想法。本质上,您可以完全基于数据库以这种方式构建整个问题。缺点是获取值,因为你必须重写 Render 方法(如果我没记错的话,已经有一段时间了,如果你想让我找到它,我确实有一个例子)。

      我承认这有点矫枉过正,但这是一个可能的解决方案。

      【讨论】:

        【解决方案5】:

        为此目的使用radiobuttonlist(你可以在工具箱中看到,它是一个asp.net标准控件)控件。这取决于您的需求。

        【讨论】:

          猜你喜欢
          • 2011-10-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-02
          • 1970-01-01
          • 2010-12-18
          相关资源
          最近更新 更多