2015-06-26 102 views
0

内的动态partialview我需要使用MVC生成动态表格。
我打算在Controller的Action(基于数据库值)内创建HTML代码,并将其作为部分视图传递给View。
要完成此任务,我需要在Action中创建一个动态视图。所以我可以添加所有的html代码并将其作为部分视图传递给视图。
有没有办法做到这一点?生成控制器MVC C#


是否有任何其他方式在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); 

EDITS返回它:要为您的部分生成代码,您需要在您的控制器动作中点击右键,然后选择添加视图类型MyPartial as查看名称,然后选中添加强类型视图 ...您将需要精确的模型类和模板使用(列表,删除,编辑,创建或空)

+0

但第二种方式“MyPartial”是一个空视图。我需要在服务器端生成该视图所需的代码。无论如何,要做到这一点? –

+0

请参阅我的编辑:'要为您的部分生成代码,您需要右键单击您的控制器操作并选择添加视图类型MyPartial作为视图名称,然后选中添加强类型视图...您将需要精确模型类和要使用的模板(列表,删除,编辑,创建或清空)' – Bellash

+0

也许我提出这个问题的方式并不能显示出我的真实需求。例如,db中有100个记录。根据数据库的值,局部视图会发生变化,例如在一个实例中,它是2个文本框,1个单选按钮和3个复选框。在另一个例子中,它是4个文本框,3个单选按钮和2个复选框,并且像智者一样。所以我不能硬编码模型和视图。我需要动态生成视图所需的html(剃须刀)代码,然后将其放到部分视图中,并将其显示在父视图的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; 

} 

然后你在DB你可以创建一个类和派生每种类型的列表from Field

public class DropDown : Field 
{ 
    public Dictionary<string, string> Values {get;set;} 
} 

public class TextBox : Field 
{ 
    public string Value {get;set;} 
} 

然后当读到米数据库通过一个工厂类

// READ从DB

通过每个
var model = new List<Field>(); 

var fields = dbContext.Fields.Where(s => s.FormId == 1); 

foreach(var field in fields){ 

model.Add(FieldFactory(field)); 

} 

//穿过FACTORY

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。