C# ASP.net MVC部分视图表单需要父模型的属性
我试图以这样一种方式构造我的控制器和视图,即我的所有视图都是强类型的,并且我不使用ViewBag。我有一个从中继承的基本视图模型,为每个视图创建一个“容器”视图模型,并为每个表单创建一个视图模型 在本例中,让我们关注一个区域实体,它可以由一组国家组成(可能用于计算运费、增值税等):C# ASP.net MVC部分视图表单需要父模型的属性,c#,asp.net,asp.net-mvc,viewmodel,C#,Asp.net,Asp.net Mvc,Viewmodel,我试图以这样一种方式构造我的控制器和视图,即我的所有视图都是强类型的,并且我不使用ViewBag。我有一个从中继承的基本视图模型,为每个视图创建一个“容器”视图模型,并为每个表单创建一个视图模型 在本例中,让我们关注一个区域实体,它可以由一组国家组成(可能用于计算运费、增值税等): 公共类BaseViewModel { 公共字符串标题{get;set;} 公共字符串元描述{get;set;} 公共字符串CanonicalUrl{get;set;} 公共网站网站{get;set;}//类,该类包含
公共类BaseViewModel
{
公共字符串标题{get;set;}
公共字符串元描述{get;set;}
公共字符串CanonicalUrl{get;set;}
公共网站网站{get;set;}//类,该类包含站点名称、基本url、使用ssl等属性
}
公共类分区创建窗体
{
[关键]
公共int Id{get;set;}
[必需]
公共字符串名称{get;set;}
[数据类型(DataType.multilitext)]
公共字符串说明{get;set;}
public int[]countryId{get;set;}//选定的国家ID
}
公共类ZoneCreateViewModel:BaseViewModel
{
public IEnumerable Countries{get;set;}//所有国家/地区。用于创建要从中选择的下拉列表
公共区域创建窗体创建窗体{get;set;}
}
我试图将我的“表单模型”限制为仅发布到表单的字段。这有助于通过消除基本模型中的属性和post上控制器操作中的AutoMapper来搭建脚手架
但是,在本例中,我需要访问父模型的Countries
属性,以便创建所有国家/地区的下拉列表
在我看来,我有一些选择:
区域创建表单的一部分
视图模型,并在控制器操作上使用[Bind(Exclude=“Countries”)]以避免过度过账有“标准”的处理方法吗?我在web上看到的大多数示例都使用域模型,而不是带有任何继承和子模型的视图特定模型。每当他们有额外的数据需要时,他们就把它塞进ViewBag,这对我来说很脏。您使用的是哪个版本的MVC?使用MVC6,您可以在视图中添加依赖项注入,而不必在模型中添加依赖项注入 例如:
区域创建表单
,该表单不包括国家列表。我想我最终要做的是将IEnumerable countries
和IEnumerable State
添加到区域创建表单中orm
建模并使用公共操作结果创建([Bind(Exclude=“Countries,States”)]ZoneCreateForm)
作为操作方法。
public class BaseViewModel
{
public string Title { get; set; }
public string MetaDescription { get; set; }
public string CanonicalUrl { get; set; }
public Website Website { get; set; } // class that contains properties like site name, base url, use ssl, etc
}
public class ZoneCreateForm
{
[Key]
public int Id { get; set; }
[Required]
public string Name { get; set; }
[DataType(DataType.MultiLineText)]
public string Description { get; set; }
public int[] CountryIds { get; set; } // Selected country ids
}
public class ZoneCreateViewModel : BaseViewModel
{
public IEnumerable<Country> Countries { get; set; } // All countries. Used to create a dropdown list to select from
public ZoneCreateForm CreateForm { get; set; }
}