簡體   English   中英

將數據傳遞到PartialView邏輯

[英]Passing data into PartialView logic

我正在關注一本書中的教程,該教程介紹了使用局部視圖創建類別側菜單。 直到顯示當前選定類別的功能為止,它一直很好。

由於似乎沒有任何邏輯將當前選擇的類別傳遞到局部視圖,因此出現了問題。

布局CSHTML文件用於顯示類別

@{ 
    Html.RenderAction("Menu", "Nav"); 
  }

如您所見,所選類別ID未傳遞

如果您查看NavController,則菜單方法接受選擇類別ID

  public PartialViewResult Menu(int selCatID = -1)
    {
        ViewBag.SelectedCatID = selCatID;
        return PartialView(repository.Categories);

    }

但是來自layout.html文件的調用似乎正在調用Menu,而沒有參數導致selCatID始終為-1

這是菜單視圖

 @foreach (var cat in Model)
{
 @Html.RouteLink( cat.CategoryName , new {
controller = "Company", action="List"
       , catID=cat.ID, page= 1},
    new { @class = cat.ID == ViewBag.SelectedCatID ? "selected" : null }
)
}

似乎沒有任何可見的代碼顯示從主控制器(公司)中選擇的CatID傳遞到NavController的視圖中。

我認為主控制器應該為選定的ID設置viewbag。我做了以下更改,並且可以正常工作,但是我不確定這是否是正確的技術。 我想知道我是否做得正確,還是錯過了什么?

在布局文件中,在以下位置傳遞參數:

Html.RenderAction("Menu", "Nav", new { selCatID = ViewBag.SelCatID });

在主實體控制器(CompanyController)中設置當前選定ID的視圖包

public class CompanyController : Controller
{
    .....
 public ViewResult List(int catID = -1, int page = 1)
      {
       CompaniesListViewModel viewModel = new CompaniesListViewModel
        {
         ...........
        };

        ViewBag.SelectedCatID = catID;
        return View(viewModel);

問題是這段代碼

  Html.RenderAction("Menu", "Nav", new { selCatID = ViewBag.SelCatID });

我添加了參數,因為它沒有傳遞空值並使它在第一次運行時崩潰。 因此,我將其更改回:Html.RenderAction(“ Menu”,“ Nav”);

為了處理null,我將參數更改為可為null的int

    public PartialViewResult Menu(int? selCatID = -1)
    {
        ViewBag.SelectedCatID = selCatID;

現在一切正常。

暫無
暫無

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

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