У меня есть список категорий сообщений в блоге (~ 20) в справочной таблице.Я хочу отобразить их на нескольких страницах в виде списка гиперссылок, по которым пользователь может щелкнуть.Я также хочу отобразить их в раскрывающемся списке в 2 или более местах (страницы с различными видами)
Следующие работы и я вижу категории в виде меню / списка гиперссылок.Но это заставит меня изменить несколько контроллеров, где мне нужно показать категории.Как лучше всего справиться с этим, чтобы у меня было минимальное изменение кода?
//#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/cid=@cat._id">@cat.Name</a>
</li>
}
</ul>
</section>
Спасибо за чтение
Редактировать: я внес эти изменения, и, похоже, тоже работает.Любые комментарии или улучшения, которые я могу сделать здесь?
// # 1 удалил эту строку из открытого класса ShowPostModel (модель теперь СУХАЯ)
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)