站点范围标签云

时间:2011-06-12 05:12:28

标签: c# asp.net-mvc

我为自己的网站创建了一个标签云部分视图。部分视图将包含在网站的所有页面上。数据来自数据库。有没有办法在全局中运行控制器中的代码,所以我不必将它放在每个控制器的每一个动作上?

我想避免将其放在每个动作上:

public ActionResult Index()
{
    ViewData["Tags"] = Tags.GetTags();
    return View();
}

public ActionResult Index()
{
    return View(Tags.GetTags());
}

如果我不得不改变那段代码,那将是一场噩梦。必须有一种更好的方法来处理站点每个页面上的数据库绑定内容。

2 个答案:

答案 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中,也可以从代码中创建自定义控件,并在需要该代码的页面中重复使用它。