2014-08-30 64 views
0

我試圖創造,我希望用戶在索引頁面中插入狀態消息也,我想告訴所有插在同一個索引頁的所有狀態消息的狀態更新頁面。如何在視圖中使用兩個相同的模型? [MVC4]

這是我的型號代碼:

public class Statuses 
{ 
    [Key] 
    public int StatusID { get; set; } 
    [DataType(DataType.MultilineText)] 
    [Required] 
    public string message { get; set; } 
} 
public class StatusContext : DbContext 
{ 
    public DbSet<Statuses> Status { get; set; } 
} 

而且,我在Index.cshtml頁面使用

@Html.EditorFor(model => model.message)

要顯示的編輯器,我用在查看下面的模型。

@model LearnStart.Models.Statuses 

但是,要顯示Multiline TextArea下面的所有狀態消息,我想我應該使用下面的一個。

@model IEnumerable<LearnStart.Models.Statuses> 

如何使用同樣的觀點既模式,使我可以顯示文本區域(插入狀態信息),並在下面列出所有可用的狀態信息?

+0

在你的情況,你首先需要獲取信息的列表,以便最好的辦法是你綁定該消息列表中選擇模板在ViewBag中,並且該ViewBag在視圖側綁定到textarea。讓我知道你是否需要一些代碼。 – 2014-08-30 05:17:13

回答

-1

簡單的方法是把一個列表內Viewbag並顯示在搜索列表如下所示: -

控制器:

Public Actionresult Myaction() 
{ 
    ......... 
    Viewbag.data = //bind list of messages here 
    return View(); 
} 

查看:

@model LearnStart.Models.Statuses 
......... 
......... 
......... 
@if(Viewbag.data != null){ 
<table> 
@foreach(var item in Viewbag.data) 
    { 
    <tr><td>@item.message</td></tr> 
    } 
</table> 
} 
+0

@ Arjun ..我認爲這是你想要..如果需要更多的幫助,然後評論.. – 2014-08-30 06:06:01

+0

@downvoter ...照顧評論.. – 2014-08-30 07:02:02

+0

你是建議他修改他的實體,以包括一個自我引用的導航屬性。除了這個在他的數據模型中沒有任何意義的事實之外,它的代碼的其餘部分都會產生影響,所有這些都與在視圖中顯示數據有關。狀態之間沒有關係。這是可怕的建議。 – 2014-08-30 07:07:55

2

首先,你不應該直接將您的實體傳遞給您的視圖。建議的最佳做法是使用View Models,這些模型是專門針對您的視圖定製的模型。

其次,使用視圖模型時,你現在可以做到這一點,因爲它不依賴於你的數據模型實體:

public class MyActionViewModel { 
    public List<StatusesViewModel> StatusList {get;set;} 
    public StatusesViewModel CreatedStatus {get;set} 
} 

然後在您的視圖:

@model MyActionViewModel 

@Html.EditorFor(x => x.CreatedStatus) 

............................................. 

@Html.DisplayFor(x => x.StatusList) 

然後您可以創建兩個模板,一個EditorTemplate和DisplayTempate:

~/Views/Shared/EditorTemplates/StatusesViewModel.cshtml

@model StatusesViewModel 

@using(Html.BeginForm()) { 
    @Html.EditorFor(x => x.Message) 
    <input type="submit" value="Create Status" /> 
} 

~/Views/Shared/DisplayTemplates/StatusesViewModel.cshtml

@model StatusesViewModel 

<div> 
    <span>@Model.Message</span> 
</div> 

這是有關使用模板不錯的事情是,他們會自動在您的收藏..沒有的foreach或語句用於迭代。單EditorFor工作在整個集合,然後呈現基於類型,在這種情況下轉化爲StatusViewModel.cshtml

+0

我需要在模型中分別編寫MyActionViewModel類?如果是這樣,請參閱我已經有「狀態」模型。 – Arjun 2014-08-30 09:55:22

+0

@Arjun,在你的項目中創建一個單獨的文件夾(比如說),用''MyActionViewModel''(和你的其他視圖模型)的'ViewModels'和相關'using'語句。正如Erik所說,使用視圖模型是推薦的方法。 [這裏的答案](http://stackoverflow.com/questions/11064316/what-is-viewmodel-in-mvc)可能有助於瞭解的好處。 – 2014-08-30 12:47:22

+0

@Arjun - 是的,我知道你alrady有一個狀態模型。但是,這是您的數據實體,在您的視圖中直接使用此模型並不被認爲是最佳實踐。您應該創建一個視圖模型版本以用於您的視圖。是的,這是更多的工作,但它也更易於維護,並且不會對數據模型造成太多問題。 – 2014-08-30 21:23:21

相關問題