2011-09-11 132 views
0

我有處理特定模型的局部視圖。 如何將它傳遞給從沒有關於該模型的引用的視圖的部分視圖?如何將模型傳遞給強類型的局部視圖

我的部分觀點有:

@model MyNS.Models.NewsComment 

如何從撥打:

@Html.Partial("CommentForm", Model.NewsComments.SingleOrDefault()) //does not work 
+0

你會得到什麼樣的錯誤(如果有的話)? – scartag

+0

我得到這個錯誤:「傳入字典的模型項目的類型是'MyNS.Models.News',但是這個字典需要一個'MyNS.Models.NewsComment'類型的模型項目;我從新聞模型調用,但我需要從部分視圖插入一個新聞評論項目 – Cris

+0

聽起來好像你的「新聞評論」屬性鍵入爲「新聞」,而不是「新聞評論」。你可以在主視圖(具有NewComments屬性的類)中檢查這個和/或發佈模型的代碼嗎? –

回答

0

假設你有沒有提到它在您的視圖模型,您可以執行下列操作之一:

@{ 
     var repo = new Models.MyRepo(); 
     var partialModel = repo.GetAll(); 
    } 

    @Html.Partial("CommentForm", partialModel) 

但是這完全違背了ASP.NET MVC的Seperation of Concerns理論。

我會做的就是把它傳遞給視圖模型(事件,如果我不會用它在我的視圖中),並從我的觀點傳遞給部分。這樣你處理從你的控制器的數據訪問,這將是更好的方法。

UPDATE

我剛剛看到有關錯誤您發表評論。在這種情況下,你會做什麼是一個更好的方法(我上面顯示也將這項工作的第一種情況)如下:

創建一個視圖模型如下:

public class MyViewModel { 

    public MyNS.Models.News News {get; set;} 
    public MyNS.Models.NewsComment NewsComment {get; set;} 

} 

並將其傳遞您的看法如下:

var viewModel = new MyViewModel(); 
viewModel.News = repo.GetNews(); 
viewModel.NewsComment = repo.GetNewsComment(); 

retun View(viewModel); 

然後在其上運行您的看法如下:

@Html.Partial("CommentForm", Model.NewsComment) 
+0

您的代碼假設新聞是與newscomment完全無關的獨立實體。從他的代碼中,很容易看到NewsComment是News的導航屬性(很可能存在db關係) – scartag

+0

然後他傳遞了完全錯誤的模型。他的部分輸入爲「MyNS.Models.NewsComment」,但他傳遞了一個模型類型「MyNS.Models.News」。 – tugberk

0

根據錯誤,模型中的NewsComments屬性是IEnumerable<News>型的,而應該是IEnumerable<NewsComment>也許你已經使用了LINQ查詢與錯誤的select語句填充模型的NewsComments財產。

相關問題