簡體   English   中英

在控制器MVC C#中生成動態的局部視圖

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM