我需要创建一个表单,在这个月中,用户将使用ASP.NET输入几个不同的值(我在思考网格类的东西,顶部的值,一天中的某一天)表格与C#后端...
那么生成此表单的最佳方法是什么?我不想对那些许多控件进行硬编码,因为它会使submition有点恼人,但我还需要能够给它在前几天输入的值并让它显示在文本框中。
我将如何创建此表单以及如何从后端的文本框中获取值?
答案 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,其中包含您可以设置的各种功能的示例(例如嵌套集合,自动填充,日期选择等)。