C# & ASP.NET MVC:如何为模型类临时绑定数据传至视图
实现临时字段传递的三种方案
方案一:使用匿名类型
无需修改原Person模型,构造数据时直接创建包含Person属性和temp字段的匿名对象集合,传递给视图即可。
控制器代码:
var listofPersons = new List<object>(); for (int i = 0; i < 5; i++) { listofPersons.Add(new { PersonId = i, Name = "", // 根据实际需求赋值 PhoneNumber = "", Email = "555example@stack.co", temp = "example" + i }); } return View(listofPersons);
视图中需使用动态类型接收:
@model IEnumerable<dynamic> @foreach (var item in Model) { <p>@item.PersonId - @item.temp</p> }
方案二:创建专用视图模型(推荐)
定义一个视图模型类,继承原Person或包含其属性,新增Temp字段,专门用于视图数据传递,既不污染原模型,又能享受强类型的编译检查和智能提示。
首先定义视图模型:
public class PersonViewModel : Person { public string Temp { get; set; } }
控制器代码:
var listofPersons = new List<PersonViewModel>(); for (int i = 0; i < 5; i++) { var per = new PersonViewModel(); per.Temp = "example" + i; per.PersonId = i; per.Email = "555example@stack.co"; // 其他Person属性按需赋值 listofPersons.Add(per); } return View(listofPersons);
视图中使用强类型模型:
@model IEnumerable<PersonViewModel> @foreach (var item in Model) { <p>@item.PersonId - @item.Temp</p> }
方案三:使用ExpandoObject动态添加属性
利用.NET的动态类型ExpandoObject,在运行时为对象添加temp字段,适合快速临时场景,但缺乏编译时类型检查。
控制器代码:
var listofPersons = new List<dynamic>(); for (int i = 0; i < 5; i++) { dynamic per = new ExpandoObject(); per.temp = "example" + i; per.PersonId = i; per.Email = "555example@stack.co"; // 其他Person属性按需赋值 listofPersons.Add(per); } return View(listofPersons);
视图接收方式同方案一,使用动态类型即可。
内容的提问来源于stack exchange,提问作者wvinyl
相关产品推荐
相关产品推荐

