2015-06-26 131 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。