Asp.net-Mvc-4

Html.Partial 不呈現局部視圖

  • June 27, 2014

我在視圖中有以下程式碼:

@if (SiteSession.SubPageHelper.DisplayType == DisplayType.List)
{
   Html.Partial("_SubLandingPage_List");
}
else
{
   Html.Partial("_SubLandingPage_Grid");
}

在部分中,我只有一個這樣的 foreach 循環:

@foreach (Product product in SiteSession.SubPageHelper.PagedProducts)
{
     some html code here
}

從記憶體的產品列表中得到PagedProducts什麼.Take()

現在上面的程式碼不顯示我的分頁產品,但如果我將部分更改為包含 at 符號,請刪除分號:

@Html.Partial("_SubLandingPage_Grid")

它將正確顯示產品。誰能告訴我這兩個版本之間的區別是什麼,因為我花了很長時間才弄清楚為什麼產品沒有顯示

告訴我們開始編寫 c# 程式碼實際上是剃刀語法,如果您不放**@它將被視為純文字,因此您需要在視圖和 html 幫助器方法中編寫 c# 程式碼之前放置@**符號不需要在前面加上分號,那麼以這種方式編寫幫助程序是剃刀語法。

例如:

@Html.LabelFor(x=>m.SomeProperty) // here @ is telling that we are writing c# statement

當你寫:

@if (SiteSession.SubPageHelper.DisplayType == DisplayType.List)
{
   Html.Partial("_SubLandingPage_List"); // this is wrong syntax 
}
else
{
   Html.Partial("_SubLandingPage_Grid");
}

正確的方法是告訴這是一個 razor html helper 和 c# 語句:

@if (SiteSession.SubPageHelper.DisplayType == DisplayType.List)
{
   @Html.Partial("_SubLandingPage_List")
}
else
{
   @Html.Partial("_SubLandingPage_Grid")
}

您可以在此處查看有關剃刀語法的更多資訊

更多連結可以幫助您了解剃須刀:

http://www.asp.net/web-pages/tutorials/basics/2-introduction-to-asp-net-web-programming-using-the-razor-syntax

http://weblogs.asp.net/scottgu/asp-net-mvc-3-razor-s-and-lt-text-gt-syntax

http://weblogs.asp.net/scottgu/introducing-razor

更新:

另一種方法是使用 RenderPartial,它可以在 if 語句中使用,而不需要添加**@**符號:

@if (SiteSession.SubPageHelper.DisplayType == DisplayType.List)
   {
       Html.RenderPartial("_SubLandingPage_List");
   }
   else
   {
       Html.RenderPartial("_SubLandingPage_Grid");
   }

Html.Partial要了解和之間的區別Html.RenderPartial,請訪問以下連結:

Html.Partial vs Html.RenderPartial & Html.Action vs Html.RenderAction

http://dotnethelpers.wordpress.com/2013/06/18/difference-between-html-renderpartial-vs-html-partial-and-html-renderaction-vs-html-action-in-mvc/

http://www.em64t.net/2010/12/razor-html-renderpartial-vs-html-partial-html-renderaction-vs-html-action-what-one-should-use/

引用自:https://stackoverflow.com/questions/24448245