[英]Generate a dynamic partialview within the controller MVC C#
我需要使用MVC生成動態表單。
我打算在Controller的Action(基於數據庫值)中創建HTML代碼,並將其作為Partialview傳遞給View。
為了完成此任務,我需要在Action內部創建一個動態視圖。 因此,我可以在其中添加所有html代碼,並將其作為Partialview傳遞給視圖。
有什么辦法嗎?
要么
MVC中還有其他方法可以動態生成html元素嗎?
在該操作中,您可以返回動態創建的html
內容。 只需使用Content()
作為波紋管
return Content("<form><input value='"+valueFromDb+"'/>...</form>");
但這不是一個好習慣,因此,您需要創建一個局部視圖,然后使用
//var modelFromDb=db.Table.FirstOrDefault();
return PartialView("MyPartial",modelFromDb);
編輯:要為您的局部生成代碼,您需要右鍵單擊控制器動作,然后選擇“ 添加視圖類型MyPartial作為視圖名稱”,然后選中“ 添加強類型視圖” ...您將需要精確的模型類和模板以被使用(列表,刪除,編輯,創建或為空)
我認為在控制器中生成代碼不是一個好主意,事情會變得一團糟。
如果要將字段保存在數據庫中,則必須針對每個字段保存類型。
例:
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;
}
然后針對數據庫中的每種類型,您可以創建一個類並從Field派生
public class DropDown : Field
{
public Dictionary<string, string> Values {get;set;}
}
public class TextBox : Field
{
public string Value {get;set;}
}
然后,當從數據庫中讀取時,每個都通過Factory類
//從數據庫讀取
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.cshtml
@model DropDown
@Html.DropDownListFor(m => m.FieldId, new SelectList(Model.Values, "Value", "Key")
使用此方法,您可以將JavaScript和jQuery代碼添加到每個字段PartialView。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.