我在查找表中列出了博客帖子類別(〜20)。 我想在多個頁面上將它們顯示爲用戶可以單擊的超鏈接列表。 我也想在兩個或更多的地方(不同的查看頁面)的下拉列表中顯示它們在ASP.NET MVC 3應用程序中處理類別部分視圖的最佳方法
以下作品&我看到類別作爲菜單/超鏈接列表。 但是這會導致我修改多個控制器,我需要顯示類別。 處理這個問題的最佳做法是什麼,以便我的代碼更改最少?
//#1 I added new class in one of my model:
namespace MyApp.Models
{
...
public class ShowPostModel
{
public Post Post { get; set; }
public IEnumerable<Category> Categories { get; set; }
}
public class Category
{
public string _id { get; set; }
public string Name { get; set; }
}
}
//#2 Populating the controller
namespace MyApp.Controllers
{
public class BlogController : Controller
{
public ActionResult ShowPost()
{
ShowPostModel viewModel = new ShowPostModel();
viewModel.Post = ReadBlogPostFromDB();
viewModel.Categories = ReadCategoriesFromDB();
return View(viewModel);
}
}
}
//#3 This is from my main view for showing the Post:
@Html.Partial("_Categories", Model.Categories)
//#4 This is my _Categories partial view:
@model IEnumerable<MyApp.Models.Category>
<section>
<header><b>Categories</b></header>
<ul style="padding:0;margin:0;">
@foreach (var cat in Model)
{
<li>
<a href="/post/browse/[email protected]_id">@cat.Name</a>
</li>
}
</ul>
</section>
感謝您閱讀
編輯: 我做了這些改變,似乎工作爲好。 我可以在這裏做任何評論或改進?
//#1中刪除這條線從公共類ShowPostModel(模型現在DRY)
public IEnumerable<Category> Categories { get; set; }
//刪除
//#2創建的基本控制器,並從它
public abstract class BlogBaseController : Controller
{
public BlogBaseController()
{
ViewBag.Categories = ReadCategoriesFromDB();
}
}
繼承
//#3強制所有控制器,我需要從基本控制器繼承的類別
public class BlogController : BlogBaseController
//#4改變我自己的看法
@Html.Partial("_Categories", (IEnumerable<MyApp.Models.Category>)@ViewBag.Categories)
這很好。但我主要關心的是將類別代碼放在哪裏?修改每個控制器看起來很糟糕,而不是DRY – kheya 2011-05-03 21:10:09
通過修改每個控制器,你的意思是做這個viewModel.Post = ReadBlogPostFromDB(); viewModel.Categories = ReadCategoriesFromDB();在每一個控制器?如果是的話,爲什麼不從模型中調用該功能,所以您不必從控制器中執行該功能? – atbebtg 2011-05-03 21:28:28
我在我的代碼中修改了控制器和模型。在我的模型中,我不得不在另一個模型類中添加Category類和IEnumerable。然後在控制器中,我必須填充列表(),以便視圖可以讀取它。 –
kheya
2011-05-03 21:34:53