Asp.net-Mvc-4
Html.Partial 不呈現局部視圖
我在視圖中有以下程式碼:
@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://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