我相信在控制器和视图之间传递数据的主要方法是创建一个类来表示要传递到视图的数据,并将该模型变量传递给视图方法。
/Models/Home/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);
}
}
/Views/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 以使用接口和共享数据
/Models/Home/IndexViewModel.cshtml
namespace MyProject.Models.Home
{
public class IndexViewModel: ISharedDataViweModel
{
public string Message { get; set; }
public ShardedData Data { get; set; }
}
}
创建一个知道如何显示共享数据的部分视图
/视图/共享/SharedDataView.cs(在 Razor MVC3 中)
@Model MyProject.Models.ISharedDataViewModel //strongly-typed partial view
@if (model != null && model.Data != null)
{
<h3>@model.Data.Birthday.ToString()</h3>
}
更新主页索引页面以调用部分视图
/Views/Home/Index.cshtml(在 Razor MVC3 中)
@Model MyProject.Models.Home.IndexViewModel //strongly-typed view
<h1>@model.Message</h1>
@Html.Partial("SharedDataView", model)
现在,如果页面模型实现,任何页面都可以调用部分视图ISharedDataViewModel
.