簡體   English   中英

如何在ASP.NET MVC中使用部分視圖?

[英]How to use Partial Views in ASP.NET MVC?

我正在構建一個ASP.NET MVC應用程序,並希望使用局部視圖來顯示我的產品類別。 它將成為一個網上商店,在每個頁面上,在菜單欄下面,我想顯示另一個包含所有產品類別的欄。

我想為此使用局部視圖。 目前在~/Views/Categories我創建了局部視圖_CategoriesHeader.cshtml (我通過在“創建新視圖”對話框中選擇“部分視圖”來做到這一點,所以它實際上是部分視圖)

_CategoriesHeader.cshtml的內容如下:

@model IEnumerable<Webshop.Models.Category>

@{
    Layout = null;
}

<ul>
    @foreach (var category in Model)
    {
        <li>@Html.ActionLink(category.Name, "Category", "Categories", new { ID = category.CategoryID }, null)</li>

    }
</ul>

現在在~/Views/Shared/_Layout.cshtml我添加了以下代碼:

@Html.Partial("~/Views/Categories/_CategoriesHeader.cshtml", new Webshop.DAL.ShopContext().Categories.ToList())

我想知道這是否是使用需要模型的部分視圖的正確方法。 現在它只是內聯創建一個新的DbContext對象來獲取所有類別,但我認為擁有一個模型更好。 但我不知道該怎么做。 我做了一些其中CategoriesController.cs有一個方法用於這個局部視圖,但是這不起作用,因為包含的視圖已經加載了自己的模型。

不。您不應在視圖中執行任何DAL操作。 我實際上建議只使用ifforeach和類似的陳述。 沒有其他的。 在控制器中准備數據並傳入。

您應該將new Webshop.DAL.ShopContext().Categories.ToList()放入主視圖中使用的模型中,並將其傳遞給局部視圖。

@Html.Partial("~/Views/Categories/_CategoriesHeader.cshtml", Model.Categories)

如果要在列表中呈現數據,則可能需要foreach

如果要對每個頁面執行此操作,則應創建一個新操作,並讓該操作呈現,而不是部分視圖。 (該動作應調用局部視圖)。 該操作可以獲取所需信息並將其傳遞到視圖中。

@Html.Action("CategoriesHeader")

使用子操作。

ShopController.cs

[ChildActionOnly]
public ActionResult CategoryList()
{
    var categories = new Webshop.DAL.ShopContext().Categories.ToList();
    return PartialView("_CategoryList", categories);
}

_CategoryList.cshtml

@model IEnumerable<Webshop.Models.Category>

<ul>
    @foreach (var category in Model)
    {
        <li>@Html.ActionLink(category.Name, "Category", "Categories", new { ID = category.CategoryID }, null)</li>

    }
</ul>

_Layout.cshtml

@Html.Action("CategoryList", "Shop")

你可以做的是使用Html.Action或Html.RenderAction。 這可以避免從View中調用任何DAL。 你的控制器大多數都有注釋為ChildActionOnly的動作,並且在動作內部,如上面的回答注釋,使用返回PartialView。

另一種方法是從控制器返回局部視圖。 您的控制器操作將負責將模型加載到局部視圖中。 您的控制器代碼將如下所示:

public PartialViewResult GetYourPartialView(string id)
        {
            var vm = new yourviewmodel();          
            return PartialView("_YourPartialView", vm);
        }

現在,你已經有一個加載的局部視圖。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM