使用单个视图导出mvc模型
我有一个基本模型类NotificationBase和两个派生模型,GeneralNotification和ReleaseNotification。
public class NotificationBase { public int Id { get; set; } [Required] [StringLength(50, ErrorMessage="Title must not exceed 50 characters.")] public string Title { get; set; } [Required(ErrorMessage="Type is required.")] public int TypeId { get; set; } [Required(ErrorMessage="Importance is required.")] public int ImportanceId { get; set; } public DateTime Created {get; set; } [Required(ErrorMessage="Start date is required.")] public DateTime StartDate { get; set; } [Required(ErrorMessage="End date is required")] public DateTime EndDate { get; set; } [AllowHtml] [Required(ErrorMessage="Details are required")] public string Details { get; set; } } public class GeneralNotification : NotificationBase { [Required(ErrorMessage="Message is required.")] [StringLength(50, ErrorMessage = "Message must be maximum 50 chararacters long.")] public string Message { get; set; } } public class ReleaseNotification : NotificationBase { [Required(ErrorMessage="Version is required.")] public string Version { get; set; } }
我正在尝试使用单个编辑视图来编辑两种派生通知类型。
此视图具有NotificationBase类型的模型。
问题是我无法获得要在编辑视图中显示的派生类型的添加属性。 发送基类型的模型意味着我失去了派生类型的额外属性。
有没有解决方法,或者我只需要为每个派生模型制作单独的视图?
您可以在视图中添加几个条件。 假设您的视图是使用基类强类型的:
@model NotificationBase
您可以检查每个子类并添加相应的字段(下面未经测试的代码!):
@if (Model is GeneralNotification) { Html.TextBoxFor(m => ((GeneralNotification) m).Message); }
第二个子类型当然也是如此:
@if (Model is ReleaseNotification) { Html.TextBoxFor(m => ((ReleaseNotification) m).Version); }
这也可以通过使用接口来解决。 例如,如果您想避免视图中的条件。 Razor视图也可以通过界面强类型化。
您可以使用NotificationBase实现的完整界面,并在派生类中进行覆盖。 (请注意,NotificationBase需要为此抽象)或者您实现部分接口。
氪
将模型类型设置为基本类型:
@model NotificationBase
然后:
@Html.EditorForModel()
EditorForModel
足够聪明,可以根据在运行时传递的具体类型呈现表单。
问题解决了:我向视图传递了一个特定的派生类型模型(GeneralNotification / ReleaseNotification),而不是传递基类型模型。 视图保持不变,并且现在正在进行着作品。
- 如何在ASP.NET MVC中将参数数组作为GET / POST?
- LINQ to Entities无法识别方法’System.String get_Item(System.String)’,
- 扩展ASP.NET身份
- Visual Studio 2012 MVC构建错误:名称空间“System.Data.Entity”中不存在类型或命名空间名称“Infrastructure”
- entity framework上的懒惰与急切加载性能
- 基于当前用户的“角色”动态构建ASP.NET MVC主页面菜单
- 使用存储库模式切换LazyLoading
- MVC DropDownList不从模型中选择值
- 在WebApi或MVC控制器中使用ConfigureAwait(false)有任何危险吗?