Я считаю, что основной метод передачи данных между контроллерами и представлениями - это создание класса, представляющего данные, которые вы хотите передать в ваше представление, и передача этой переменной модели в метод представления.
/ Модели / Главная / IndexViewModel.cs
namespace MyProject.Models.Home
{
public class IndexViewModel
{
public string Message { get; set; }
}
}
Контроллеры / HomeController.cs
public class HomeController
{
public ActionResult Index()
{
IndexViewModel model = new IndexViewModel();
model.Message = "Hello World!";
View(model);
}
}
/ Просмотров / Home / Index.cshtml (в Razor MVC3)
@Model MyProject.Models.Home.IndexViewModel //strongly-typed view
<h1>@model.Message</h1>
Давайте возьмем этот простой пример и перейдем к вашему конкретному запросу. Самый простой способ - позволить каждому представлению просто использовать модель MyClass
. Тем не менее, это становится очень негибким, поэтому вот что я хотел бы сделать, чтобы сохранить гибкость дизайна. Я предполагаю, что есть некоторые данные, которые вы хотите передать многим представлениям (некоторые или все).
Создайте класс, который представляет данные, которые вы хотите передать нескольким представлениям:
/ Модели / SharedData.cs
namespace MyProject.Models
{
public class SharedData
{
public DateTime Birthday { get; set; }
}
}
Создайте интерфейс для моделей, которым требуется класс SharedData.
/ Модели / ISharedDataViewModel.cs
namespace MyProject.Models
{
public interface ISharedDataViewModel
{
public SharedData Data { get; set; }
}
}
Обновление Home IndexViewModel для использования интерфейса и общих данных
/ Модели / Главная / IndexViewModel.cshtml
namespace MyProject.Models.Home
{
public class IndexViewModel: ISharedDataViweModel
{
public string Message { get; set; }
public ShardedData Data { get; set; }
}
}
Создать частичное представление, которое знает, как отображать общие данные
/ Views / Shared / SharedDataView.cs (в Razor MVC3)
@Model MyProject.Models.ISharedDataViewModel //strongly-typed partial view
@if (model != null && model.Data != null)
{
<h3>@model.Data.Birthday.ToString()</h3>
}
Обновите страницу Домашнего указателя, чтобы вызвать частичное представление
/ Просмотров / Home / Index.cshtml (в Razor MVC3)
@Model MyProject.Models.Home.IndexViewModel //strongly-typed view
<h1>@model.Message</h1>
@Html.Partial("SharedDataView", model)
Теперь любая страница может вызывать частичное представление, если модель страниц реализует ISharedDataViewModel
.