ASP.NET动态表单生成和子表达

时间:2010-01-22 00:44:14

标签: c# asp.net forms

我需要创建一个表单,在这个月中,用户将使用ASP.NET输入几个不同的值(我在思考网格类的东西,顶部的值,一天中的某一天)表格与C#后端...

那么生成此表单的最佳方法是什么?我不想对那些许多控件进行硬编码,因为它会使submition有点恼人,但我还需要能够给它在前几天输入的值并让它显示在文本框中。

我将如何创建此表单以及如何从后端的文本框中获取值?

3 个答案:

答案 0 :(得分:2)

这是一个创建动态表单并将其提交回数据库的示例应用程序。它是用VB.Net编写的,但我确定它很容易转换为C#。

http://www.asp101.com/samples/form_dynamic_aspx.asp

基本上它的工作方式是动态地将控件添加到表单,然后访问使用Request.Form集合发布到服务器的值。

答案 1 :(得分:0)

如果您是从头开始构建并且可以使用ASP.NET MVC框架,那么可能值得在codeplex上查看Dynamic Forms项目:http://mvcdynamicforms.codeplex.com/

对于您的情况可能有点过分,但这似乎是一种非常强大的方式来实现动态表单方法(您可以将配置存储在XML文件中,数据库中等),并且通过评估来处理发回数据服务器端代码中的Request对象。

答案 2 :(得分:0)

您可以使用我的FormFactory库轻松完成此操作。

默认情况下,它会反映视图模型以生成PropertyVm[]数组:

```

var vm = new MyFormViewModel
{
    OperatingSystem = "IOS",
    OperatingSystem_choices = new[]{"IOS", "Android",};
};
Html.PropertiesFor(vm).Render(Html);

```

但您也可以以编程方式创建属性,因此您可以从数据库加载设置,然后创建PropertyVm

这是Linqpad脚本的一个片段。

```

//import-package FormFactory
//import-package FormFactory.RazorGenerator


void Main()
{
    var properties = new[]{
        new PropertyVm(typeof(string), "username"){
            DisplayName = "Username",
            NotOptional = true,
        },
        new PropertyVm(typeof(string), "password"){
            DisplayName = "Password",
            NotOptional = true,
            GetCustomAttributes = () => new object[]{ new DataTypeAttribute(DataType.Password) }
        }
    };
    var html = FormFactory.RazorEngine.PropertyRenderExtension.Render(properties, new FormFactory.RazorEngine.RazorTemplateHtmlHelper());   

    Util.RawHtml(html.ToEncodedString()).Dump(); //Renders html for a username and password field.
}

```

Theres a demo site,其中包含您可以设置的各种功能的示例(例如嵌套集合,自动填充,日期选择等)。