代码之家  ›  专栏  ›  技术社区  ›  dkarzon Sven Grosen

ASP.NET动态表单生成和提交

  •  3
  • dkarzon Sven Grosen  · 技术社区  · 15 年前

    我需要创建一个表单,在该表单中,用户将在其中输入几个不同的值(我认为是网格类型的东西,沿顶部的值,沿侧面的一个月中的一天),使用带有C后端的ASP.NET表单…

    那么生成这个表单的最佳方法是什么呢?我不想硬编码许多控件,因为这会使提交有点烦人,但我也需要能够给它在前几天输入的值,并让它显示在文本框中。

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

    3 回复  |  直到 8 年前
        1
  •  2
  •   John Boker    15 年前

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

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

    基本上,它的工作方式是将控件动态添加到表单中,然后使用 Request.Form 收藏。

        2
  •  0
  •   Harv    15 年前

    如果您从头开始构建并且可以使用ASP.NET MVC框架,那么可能值得在codeplex上签出动态表单项目: http://mvcdynamicforms.codeplex.com/

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

        3
  •  0
  •   mcintyre321    8 年前

    使用我的 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.
    }
    

    ` `

    有一个 demo site 通过各种功能的示例,您可以设置(例如嵌套集合、自动完成、日期选取器等)