在 asp-for="object" 内的页面视图(模板)中投射对象
Posted
技术标签:
【中文标题】在 asp-for="object" 内的页面视图(模板)中投射对象【英文标题】:Cast an object in the page view (template) inside asp-for="object" 【发布时间】:2022-01-16 13:59:18 【问题描述】:如何在页面视图的引号("") (asp-for="object") 内投射一个对象?
我有一个父类 Person 和两个子类 Student 和 Teacher。
variable:
Person person;
我想将其强制转换为子类......类似于:
asp-for="(Person)person.grade"
或
asp-for="((Person)person).grade"
但是这两个代码都不起作用。 如何在 asp-for 引号 ("") 中转换对象?
这是整个代码结构:
这是整个代码结构:
//父类
public abstract class Person
//code
//child class
public class Teacher : Person
//code
public double Salary get; set;
//2nd child class
public class Student : Person
//code
public double Grade get; set;
//in WinForms I could access child classes components by down casting
public partial class FormSchool : Form
//code
Person Person;
double grade = ((Student)Person).Grade;
//code
//in razor pages as well in .cs files
public class IndexModel : PageModel
//code
[BindProperty]
public Person Person get; set;
//code
//but when it came to the page templates I got stuck how to do it inside of the asp-for=".." quotes
// the following code doesn't work
<select asp-for="((Student)Person).Grade" asp items="html.GetEnumSelectList<Grades>()"></select>
neither this:
<input asp-for="@(Person)Model.person.grade"/>
现在我只是使用子类来创建对象并将它们模型绑定到视图,但我想只拥有一个对象并将其转换为模板中的某些特定子类用途。
【问题讨论】:
由于您使用的是剃须刀页面,您将不得不发布整个页面和后面的整个代码。还有 Person、Student 和 Teacher 类代码。 为什么你需要把它转换成子类?你能分享你的模型吗?你在哪里使用asp-for
?asp-for
将生成到id和name属性。如果你想绑定使用 asp-for 的数据,不需要强制转换。
【参考方案1】:
<input asp-for="...."/>
输入标签助手将ModelExpression
属性绑定到属性。 ModelExpressions 有点奇怪。从本质上讲,razor 编译器会将您的代码翻译成等价于;
= ModelExpressionProvider.CreateModelExpression<TModel>(m => m.[your attribute text], ...);
但是,如果您的属性以 @
开头,则不会插入前导 m.
。换句话说,您应该能够做到以下几点;
<input asp-for="@(Person)Model.person.grade" />
至少应该编译。这是否能解决您的实际问题是另一回事。
【讨论】:
以上是关于在 asp-for="object" 内的页面视图(模板)中投射对象的主要内容,如果未能解决你的问题,请参考以下文章
Celery CRITICAL/MainProcess] 不可恢复的错误:AttributeError("'float' object has no attribute 'items'&qu
Angular Object 可能为“null”。 <span *ngIf="checkoutForm.get('emailAddr').hasError('required')&qu
ASP.NET Identity 2.0 Roles.IsUserInRole 给出 "Invalid object name 'dbo.aspnet_SchemaVersions'.&qu