asp.net mvc-在控制器mvc C#中生成一个动态局部视图

本文关键字:一个 视图 动态局 mvc- net 控制器 mvc asp | 更新日期: 2023-09-27 17:59:45

我需要使用MVC生成一个动态表单
我计划在控制器的操作中创建HTML代码(基于数据库值),并将其作为Partialview传递给View
为了完成这个任务,我需要在Action中创建一个动态视图。因此,我可以添加其中的所有html代码,并将其作为Partialview传递给视图
有办法做到这一点吗?

或者
MVC中还有其他动态生成html元素的方法吗?

asp.net mvc-在控制器mvc C#中生成一个动态局部视图

在该操作中,您可以返回动态创建的html内容。只需使用Content()作为波纹管

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

但这不是一个好的做法,因此,您需要创建一个局部视图,然后使用返回

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

编辑:要为您的分部生成代码,您需要在控制器操作中右键单击,并选择添加视图类型MyPartial作为视图名称,然后选中Add strong-Typed View。。。您将需要精确的模型类和要使用的模板(列出、删除、编辑、创建或清空)

我不认为在控制器中生成代码是个好主意,事情会变得一团糟。

如果要在数据库中保存字段,则必须针对每个字段保存一个类型。

示例:

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中的每种类型,您都可以创建一个类,并从字段派生

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));
}

//通过工厂

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

@model DropDown
@Html.DropDownListFor(m => m.FieldId, new SelectList(Model.Values, "Value", "Key")

使用此方法,您可以将JavaScript和jQuery代码添加到每个字段PartialView中。