内的动态partialview我需要使用MVC生成动态表格。
我打算在Controller的Action(基于数据库值)内创建HTML代码,并将其作为部分视图传递给View。
要完成此任务,我需要在Action中创建一个动态视图。所以我可以添加所有的html代码并将其作为部分视图传递给视图。
有没有办法做到这一点?生成控制器MVC C#
或
是否有任何其他方式在MVC动态生成HTML元素?
内的动态partialview我需要使用MVC生成动态表格。
我打算在Controller的Action(基于数据库值)内创建HTML代码,并将其作为部分视图传递给View。
要完成此任务,我需要在Action中创建一个动态视图。所以我可以添加所有的html代码并将其作为部分视图传递给视图。
有没有办法做到这一点?生成控制器MVC C#
或
是否有任何其他方式在MVC动态生成HTML元素?
在这种行动,你可以返回动态创建html
内容。只要使用Content()
波纹管
return Content("<form><input value='"+valueFromDb+"'/>...</form>");
但这不是一个好的做法是这样,你需要创建一个局部视图,然后使用
//var modelFromDb=db.Table.FirstOrDefault();
return PartialView("MyPartial",modelFromDb);
EDITS返回它:要为您的部分生成代码,您需要在您的控制器动作中点击右键,然后选择添加视图类型MyPartial as查看名称,然后选中添加强类型视图 ...您将需要精确的模型类和模板使用(列表,删除,编辑,创建或空)
但第二种方式“MyPartial”是一个空视图。我需要在服务器端生成该视图所需的代码。无论如何,要做到这一点? –
请参阅我的编辑:'要为您的部分生成代码,您需要右键单击您的控制器操作并选择添加视图类型MyPartial作为视图名称,然后选中添加强类型视图...您将需要精确模型类和要使用的模板(列表,删除,编辑,创建或清空)' – Bellash
也许我提出这个问题的方式并不能显示出我的真实需求。例如,db中有100个记录。根据数据库的值,局部视图会发生变化,例如在一个实例中,它是2个文本框,1个单选按钮和3个复选框。在另一个例子中,它是4个文本框,3个单选按钮和2个复选框,并且像智者一样。所以我不能硬编码模型和视图。我需要动态生成视图所需的html(剃须刀)代码,然后将其放到部分视图中,并将其显示在父视图的div元素中。所以无论如何,我可以做... –
我不认为生成控制器代码是一个好主意,事情会变得一团糟。
如果您要保存在数据库中的字段,您必须对保存每个字段的类型。
例子:
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。
你可以提供更多的细节或例子什么是不良结果?也添加您的控制器和部分视图代码。 – Mivaweb
你可以使用像胡子一样的模板引擎http://mustache.github.io/ – Akshita
“动态”是一个流行词。解释你想要做什么。 – CodeCaster