在ASP.NET Web表单中创建动态UI

我需要创建一个调查页面,其中包含从数据库中读取的以下结构。

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

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

在ASP.Net MVC中,它使用默认模型绑定器为您处理脏工作。 当然你也可以创建自己的。 虽然这并不能为您提供ASP.Net Web Forms所希望的自动解决方案,但我在这种情况下的偏好是遵循ASP.Net MVC正在使用的类似通用模式,因为它的命名约定因此简化了它。 然后,您可以开始编写可以随时重用的代码。 以下是一篇文章的链接,该文章解释了Haack博客http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx上的命名惯例。

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

我建议创建一个实现问题(标签)和答案(单选按钮)的userconrol ,并将每个控件(标签,无线电)绑定到usercontrol的属性 ,然后你可以从数据库读取问题,并为每个数据创建这个usercontrol 对象并将对应数据设置为usercontrol的属性,并从控制状态读取数据,反之亦然。

虽然您必须在每个post中重新创建用户控件并将默认数据设置为这些。

您还可以使用inheritanceIQuestion接口的 不同UI创建多个用户控件,并创建依赖于环境变量的每个用户控件的工厂类。

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

所以你可以通过单选按钮迭代迭代值:$(“input [type =’radio’]”)。

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

假设您有一个可以执行的aspnet Panel控件…

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

请原谅这个例子的严酷性,暂时没有视觉工作室来检查它,但我希望你能得到这个想法。 实际上,您可以完全基于数据库以这种方式构建整个问题。 缺点是获取值,因为你必须覆盖Render方法(如果我没记错,它已经有一段时间了,如果你想让我找到它,我确实有一个例子)。

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

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