Я не думаю, что генерировать код в контроллере - это хорошая идея, все будет беспорядочно ,
Если вы сохраняете поля в базе данных, вы должны сохранять тип для каждого поля.
Пример:
Field Types Table
TypeId Name
1 TextBox
2 DropDown
Fields Table
FieldId TypeId (FK) IsEdit FormId (FK) Style
1 1 1 1 color: red
2 2 1 1 NULL
При чтении из базы данных вы можете преобразовать их в список полей
public class Field
{
// Common Properties
public string Style {get;set;}
public int TypeId {get;set;}
public string Name {get;set;
}
то для каждого типа у вас есть в БД можно создать класс и вывести от поля
public class DropDown : Field
{
public Dictionary<string, string> Values {get;set;}
}
public class TextBox : Field
{
public string Value {get;set;}
}
Затем, когда вы читаете м базы данных проходят каждый через завод класса
// считываем из БД
var model = new List<Field>();
var fields = dbContext.Fields.Where(s => s.FormId == 1);
foreach(var field in fields){
model.Add(FieldFactory(field));
}
// PASS ЧЕРЕЗ ФАБРИКА
public Field FieldFactory(Form form){
switch(field.TypeId)
{
case 1: // Textbox --> you can use enum
return new TextBox(SET_VALUES);
}
}
Затем создайте частичный вид, например,form.cshtml
, передать список поле модели
return PartialView("form", new List<Field>());
Затем обрабатывать тип поля в form.cshtml
@model List<Field>
@foreach(var field in Model){
switch(field.TypeId){
case 1: // TextBox
@Html.Partial("TextBox", (TextBox)field)
break;
case 2:
@Html.Partial("DropDown", (DropDown)field)
break;
}
}
Создать частичное представление для каждого типа поля:
TextBox.cshtml:
@model TextBox
<input type ="text" name = "@Model.Name" stlye ="@Model.Style" value = "@Model.Value" />
DropDown.cshtml
@model DropDown
@Html.DropDownListFor(m => m.FieldId, new SelectList(Model.Values, "Value", "Key")
С помощью этого метода вы добавляете JavaScript и код jQuery в каждое поле PartialView.
Можете ли вы дать более подробную информацию или примеры того, что такое результат? Добавьте свой контроллер и частичный код просмотра. – Mivaweb
вы можете использовать шаблонный движок, например, усы http://mustache.github.io/ – Akshita
«Динамический» - это модное слово. Объясните, что вы хотите сделать точно. – CodeCaster