2014-07-18 23 views
0

我可以通過ViewBag.Categories將CategoryName字段返回到列表中。我也想返回CategoryId場,並用它來動態地構建類別詳細查看URL在列表中返回多個對象屬性

這是控制器的動作:

public ActionResult Details(Item item) 
{ 
    var db = new appContext(); 
    ViewBag.Item = item.ItemTitle; 
    ViewBag.ItemLink = "http://localhost:4444/Items/Details/" + item.ItemId; 
    ViewBag.Categories = new List<string>(item.Categories.Select(c => c.CategoryName)); 

    return View(); 
} 

這是返回類別列表視圖:

@foreach (string category in ViewBag.Categories) 
{ 
    <li> 
     <a href="http://localhost:4444/Categories/Details/???">@category</a> 
    </li> 
} 

如何返回CategoryId如上所示?

+2

我建議你使用@ Html.Action( 「詳細信息」,「類別「,新{ID = category.ID})(基於dotnetoms的答案)創建鏈接。只要您將上面的硬編碼字符串(..//localhost:4444/ ..)發佈到服務器,它就會失敗。同樣'ViewBag.ItemLink應該只是ID。 –

回答

3

存儲類使用自定義類:

public class CategoryViewModel 
{ 
    public int CategoryId { get; set; } 
    public string CategoryName { get; set; } 
} 

分配這樣的:

ViewBag.Categories = item.Categories 
    .Select(c => 
     new CategoryViewModel 
     { 
      CategoryId = c.CategoryId, 
      CategoryName = c.CategoryName 
     }).ToList(); 

而且在你看來像這樣使用:

@foreach (CategoryViewModel category in ViewBag.Categories) 
{ 
    <li> 
     <a href="http://localhost:4444/Categories/Details/@category.CategoryId">@category.CategoryName</a> 
    </li> 
} 
1

您可以使用匿名類型來實現這一點:

public ActionResult Details(Item item) 
{ 
    var db = new appContext(); 
    ViewBag.Item = item.ItemTitle; 
    ViewBag.ItemLink = "http://.../Items/Details/" + item.ItemId; 
    ViewBag.Categories = item.Categories.Select(c => new { c.CategoryName, c.CategoryId }); 

    return View(); 
} 

然後在您的視圖:

@foreach (var category in ViewBag.Categories) 
{ 
    <li> 
     <a href="http://localhost:4444/Categories/Details/@(category.CategoryId)">@category.CategoryName</a> 
    </li> 
} 

然而,你可能要考慮使用強類型的車型更換ViewBag。它提供了許多優點 - 包括IntelliSense支持。

1

而不是使用一個List<string>的,你可以使用:

List<Tuple<int, string>> 

例如

ViewBag.Categories = item.Categories.Select(cat => 
     Tuple.Create(cat.CategoryID, cat.CategoryName)).ToList(); 
0

定義視圖模型是這樣的:

public class CustomViewModel 
    { 
     public string Item { get; set; } 
     public string Title { get; set; } 
     public Categories Categories { get; set; } 
    } 

    public class Categories 
    { 
     public int Id { get; set; } 
     public string CategoryName { get; set; } 
    } 

    public ActionResult Details(Item item) 
    { 
     var db = new appContext(); 
     var model = new CustomViewModel{ 
      Item = item.ItemTitle, 
      ItemLink = "http://localhost:4444/Items/Details/" + item.ItemId, 
      Categories = (item.Categories.Select(c => 
       new Categories{ Id = c.Id,CategoryName= c.CategoryName})).ToList() 
     }; 
     return View(model); 
    } 

和查看,如:

@model Categories 
    @foreach (Categories category in Model.Categories) 
    { 
     <li> 
     <a href="http://localhost:4444/Categories/Details/@category.CategoryId">@category.CategoryName</a> 
    </li> 
    } 
相關問題