剃刀页面:继承模型以在创建过程中添加字段

dct*_*lay 5 c# asp.net-mvc razor asp.net-core

这些实体在虚拟上相当于我要完成的工作(实际上更复杂)。

我只需要在创建Article(SendToSubscribers字段)时才需要在表单中显示其他字段,这些字段就不是实体本身的一部分。

public class Article {
    public string Title { get; set }
}

public class ArticleCreateForm : Article {
    public bool SendToSubscribers { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

在cshtml中,用于创建/更新:

@model Article
...
@if (string.IsNullOrEmpty(Model.Id))
{
    <admin-input asp-for="SendToSubscribers" />
Run Code Online (Sandbox Code Playgroud)

不幸的是,这是我得到的错误:

'Article'不包含'SendToSubscribers'的定义,找不到可以接受的扩展方法'SendToSubscribers'接受类型为'Article'的第一个参数(您是否缺少using指令或程序集引用?)

如果方法根本不好,很抱歉,我来自PHP背景。

我猜这不是一个好的解决方案,那么我该如何纠正呢?谢谢。

Bar*_*r J 1

您的解决方案有一种与设计模式相关的方法。

创建一个容器类,它将占用两个模型:

public class MainArticleModel{
    public Article article {get; set;}
    public ArticleCreateForm articleCreateForm {get; set;}
}
Run Code Online (Sandbox Code Playgroud)

然后你就可以使用它了:

@model MainArticleModel
...
@if (string.IsNullOrEmpty(Model.Id))
{
    <admin-input asp-for="SendToSubscribers" />
Run Code Online (Sandbox Code Playgroud)

这样,两个模型都将包含在一个视图中。