2015-06-26 4 views
0

Мне нужно создать динамическую форму с использованием MVC.
Я планирую создать HTML-код в действии контроллера (на основе значений базы данных) и передать его в представление как частичный вид.
Для выполнения этой задачи мне нужно создать динамический вид внутри Action. Поэтому я мог бы добавить в него все html-коды и передать их в виде Partialview.
Есть ли способ сделать это?Создание динамического частичного просмотра в контроллере MVC C#

or
Есть ли другой способ в MVC динамически генерировать элементы html?

+1

Можете ли вы дать более подробную информацию или примеры того, что такое результат? Добавьте свой контроллер и частичный код просмотра. – Mivaweb

+0

вы можете использовать шаблонный движок, например, усы http://mustache.github.io/ – Akshita

+0

«Динамический» - это модное слово. Объясните, что вы хотите сделать точно. – CodeCaster

ответ

0

В этом действии вы можете вернуть html содержимое, созданное на лету. Просто используйте Content() в сильфон

return Content("<form><input value='"+valueFromDb+"'/>...</form>"); 

, но это не очень хорошая практика, таким образом, вы должны создать частичный вид, а затем вернуть его с помощью

//var modelFromDb=db.Table.FirstOrDefault(); 
return PartialView("MyPartial",modelFromDb); 

правок: Чтобы сгенерировать код для вашего частичного , вам нужно щелкнуть правой кнопкой мыши в действии вашего контроллера и выбрать Добавить вид тип MyPartial as Посмотреть имя, а затем проверить Добавить Сильно напечатанный вид ... вам нужно будет уточнить класс модели и используемый шаблон (список, удалить, отредактировать, создать или удалить)

+0

Но на втором пути «MyPartial» - пустой вид. Мне нужно сгенерировать код, необходимый для этого представления на стороне сервера. Там все равно это сделать? –

+0

см. Мои изменения: 'Чтобы сгенерировать код для частичного, вам нужно щелкнуть правой кнопкой мыши в действии вашего контроллера и выбрать« Добавить вид »MyPartial в качестве вида« Просмотр », а затем проверить« Добавление строго типизированного представления »... вам нужно будет уточнить класс модели и шаблон, который будет использоваться (список, удаление, редактирование, создание или пустая) ' – Bellash

+0

Ну, может быть, способ, которым я представил вопрос, не показывает мое реальное требование. Например, в db есть 100 записей. В зависимости от значений DB изменяется частичный вид, например, в одном случае это 2 текстовых поля, 1 переключатель и 3 флажка. В другом случае это 4 текстовых поля, 3 переключателя и 2 флажка и как мудрый. Поэтому я не могу жестко кодировать модель и представление. Мне нужно динамически генерировать код html (бритвы), требуемый для представления, а затем помещать его в Partialview и отображать его в элементе div в родительском представлении. Так или иначе, что я могу сделать .... –

0

Я не думаю, что генерировать код в контроллере - это хорошая идея, все будет беспорядочно ,

Если вы сохраняете поля в базе данных, вы должны сохранять тип для каждого поля.

Пример:

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.

Смежные вопросы