2010-01-22 46 views
3

我需要創建一個表單,在這個表單中,每月的每一天用戶都會輸入幾個不同的值(我認爲網格排序的東西,頂部的值,月份的日期沿着一邊)使用ASP.NET的形式與C#後端...ASP.NET動態表單生成和子映射

那麼最好的方式來產生這種形式?我不想硬編碼那麼多的控件,因爲它會使得子控件有點煩人,但是我也需要能夠給它在前幾天輸入的值,並將它們顯示在文本框中。

我將如何去創建此表單以及如何從後端的文本框中獲取值?

回答

2

以下是創建動態表單並將其提交回數據庫的示例應用程序。它是用VB.Net編寫的,但確定它很容易轉換爲C#。

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

基本上它的工作原理是動態地添加的控件形式然後訪問投遞到與Request.Form收集服務器中的值的方式。

0

如果你從頭開始構建,並且可以使用ASP.NET MVC框架,可能是值得檢查出的動力形式在CodePlex項目上:http://mvcdynamicforms.codeplex.com/

這可能是矯枉過正的情況,但是這似乎一種非常強大的方法來獲得動態表單方法(您可以將配置存儲在XML文件中,數據庫等中),並將數據發回回來是通過評估服務器端代碼中的Request對象來處理的。

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. 
} 

```

即使世界與可以設置的各種特徵(例如嵌套集合,自動完成,datepickers等)

例子 demo site