【问题标题】:ASP Core tag helper with inheritance in model具有模型继承的 ASP Core 标签助手
【发布时间】:2017-07-08 06:57:30
【问题描述】:

假设我们有这些简化的模型:

public class Person {
   public string Address {set;get;}
}

public class Student: Person {
   public float Grade {set;get;}
}
public class Teacher: Person {
   public string Department {set; get;}
}

现在我们想要为学生和教师创建一个页面。我的问题是我们如何利用继承的好处为学生和老师创建一个页面?

我试过了:

@model Person

@{
    bool isStudent = Model is Student;
}

<form asp-action="Create">
    <div class="form-horizontal">
    @if (isStudent)
    {
        <div class="form-group">
            <label asp-for="((Student)Model).Grade" class="col-md-2 control-label"></label>
            <div class="col-md-10">
                <input asp-for="((Student)Model).Grade" class="form-control" />
                <span asp-validation-for="((Student)Model).Grade" class="text-danger"></span>
            </div>
        </div>
   } else {
        <div class="form-group">
            <label asp-for="((Teacher)Model).Department" class="col-md-2 control-label"></label>
            <div class="col-md-10">
                <input asp-for="((Teacher)Model).Department" class="form-control" />
                <span asp-validation-for="((Teacher)Model).Department" class="text-danger"></span>
            </div>
        </div>
   }
   <div class="form-group">
         <label asp-for="Address" class="col-md-2 control-label"></label>
         <div class="col-md-10">
             <input asp-for="Address" class="form-control" />
             <span asp-validation-for="Address" class="text-danger"></span>
         </div>
   </div>
   <div class="form-group">
            <div class="col-md-offset-2 col-md-10">
                <input type="submit" value="Create" class="btn btn-success" />
            </div>
        </div>
    </div>
</form>

但它不允许asp-for="((Student)Model).Grade"

【问题讨论】:

    标签: c# razor asp.net-core asp.net-core-tag-helpers


    【解决方案1】:

    找到了:

    根据https://docs.microsoft.com/en-us/aspnet/core/mvc/views/working-with-forms#the-input-tag-helper “@”字符可用于启动内联表达式

    所以这是正确的:

    asp-for="@(Model as Student).Grade"
    

    【讨论】:

      【解决方案2】:

      在 github 上查看 ViewModel with inheritance in ASP .NET Core 讨论:

      它提出了一个解决方案,其中subclass 标签助手围绕特定于每个子类的字段。如果模型为 null 或传递了该类的特定子类,则会呈现该字段。

      示例如下:link

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-12-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多