ASP 在模型中具有继承性的核心标签助手
ASP Core tag helper with inheritance in model
假设我们有这些简化模型:
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"
查看关于 github 的 ViewModel with inheritance in ASP .NET Core 讨论:
它提出了一种解决方案,其中 subclass
标签助手围绕着每个子 class 特定的字段。如果模型为 null 或传递了 class 的特定子 class,则将呈现该字段。
示例如下:link
找到了:
根据https://docs.microsoft.com/en-us/aspnet/core/mvc/views/working-with-forms#the-input-tag-helper
“@”字符可用于开始内联表达式
所以这是正确的:
asp-for="@(Model as Student).Grade"
假设我们有这些简化模型:
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"
查看关于 github 的 ViewModel with inheritance in ASP .NET Core 讨论:
它提出了一种解决方案,其中 subclass
标签助手围绕着每个子 class 特定的字段。如果模型为 null 或传递了 class 的特定子 class,则将呈现该字段。
示例如下:link
找到了:
根据https://docs.microsoft.com/en-us/aspnet/core/mvc/views/working-with-forms#the-input-tag-helper “@”字符可用于开始内联表达式
所以这是正确的:
asp-for="@(Model as Student).Grade"