我为自己的网站创建了一个标签云部分视图。部分视图将包含在网站的所有页面上。数据来自数据库。有没有办法在全局中运行控制器中的代码,所以我不必将它放在每个控制器的每一个动作上?
我想避免将其放在每个动作上:
public ActionResult Index()
{
ViewData["Tags"] = Tags.GetTags();
return View();
}
和
public ActionResult Index()
{
return View(Tags.GetTags());
}
如果我不得不改变那段代码,那将是一场噩梦。必须有一种更好的方法来处理站点每个页面上的数据库绑定内容。
答案 0 :(得分:3)
您可以始终使用ViewModel
模式,并为您的所有操作设置基础ViewModel
类:
public abstract class ViewModelBase
{
public IEnumerable<Tag> Tags { get; private set; }
public ViewModelBase()
{
Tags = GetTagsFromDatabase();
}
}
然后让每个后续ViewModel
继承此基类。
public HomeViewModel : ViewModelBase
{
...
}
然后在Controller
行动中
public ActionResult Index()
{
var viewModel = new HomeViewModel();
return View(viewModel);
}
希望这有帮助。
答案 1 :(得分:0)
您可以将全局代码放在MasterPage中,也可以从代码中创建自定义控件,并在需要该代码的页面中重复使用它。