Лучше всего, вероятно, использовать дочерние действия вместе с помощником Html.Action .
Так что, как всегда, в ASP.NET MVC вы начинаете с модели представления, которая будет представлятьинформация, которой вы готовы манипулировать / отображать в виде:
public class UserViewModel
{
public string FullName { get; set; }
}
, затем контроллер:
public class UsersController: Controller
{
// TODO: usual constructor injection here for
// a repository, etc, ..., omitted for simplicity
public ActionResult Index()
{
var name = string.Empty;
if (User.Identity.IsAuthenticated)
{
name = _repository.GetFullName(User.Identity.Name);
}
var model = new UserViewModel
{
FullName = name
};
return PartialView(model);
}
}
соответствующий частичный вид:
@model UserViewModel
{
// Just to make sure that someone doesn't modify
// the controller code and returns a View instead of
// a PartialView in the action because in this case
// a StackOverflowException will be thrown (if the child action
// is part of the layout)
Layout = null;
}
<div>Hello @Model.FullName</div>
, затем перейтивпереди вашего _Layout и включите это действие:
@Html.Action("Index", "Users")
Очевидно, что следующим улучшением этого кода будет предотвращение попадания в базу данных при каждом запросе, но сохранение этой информации где-то, когда пользователь входит в систему, как она будет присутствоватьна всех страницах.Отличными местами для этого являются, например, часть userData зашифрованного cookie аутентификации (если вы, конечно, используете FormsAuthentication), Session, ...