我有一个基类:
public class BaseClass
{
public string Name { get; set; }
public string LastName { get; set; }
}
继承自BaseClass的类:
public class InheriteClass : BaseClass
{
public string MyProperty { get; set; }
}
因此,您需要在第一个 View 中填写“姓名”和“姓氏”,然后单击“下一步”,然后转到包含更多字段的另一个 View 。
但是当我在此 View 中单击“提交”按钮时,属性“Name”和 LastName”为空...
首页“下一步”按钮:
public IActionResult GoToCategoryView(BaseClass baseClass)
{
return RedirectToAction("NextView", baseClass);
}
下一个 View 有:
@model InheritanceClass
当我点击“提交”按钮时:
public IActionResult SubmitThis(InheritanceClass inheritanceClass )
{
var testClass = new testClass
{
Name = inheritanceClass.Name,
LastName = inheritanceClass.LastName,
MyProperty = inheritanceClass.MyProperty
};
return View(testClass);
}
更新 具有更清晰的 sample 。在上面的示例中,“Name”和“LastName”为空。
最佳答案
通过请求调用操作与仅调用类上的方法不同。在后一种情况下,内存中已有一个 InheritanceClass
,只需将其向上转换为 BaseClass
。当然,稍后您可以将其向下转换回 InheritanceClass
,因为它就是这样。
对于操作,参数是从请求中提供的,它只是非结构化、未绑定(bind)的数据。使用模型绑定(bind)器来尝试将该数据“绑定(bind)”到实际的结构化类型。为此,它会查看参数的类型并实例化该类型(即BaseClass
)。然后,它将数据从请求映射到该类实例上的适当属性。但重要的是,BaseClass
没有 MyProperty
属性,因此 modelbinder 将丢弃该值。最后得到的只是一个 BaseClass 实例,因为那是参数的类型。如果您愿意,您可以向下转换为 InheritanceClass
,但是任何特定于 InheritanceClass
的属性都将为 null 或默认值,因为它们在 BaseClass
上不存在>.
总而言之,您不能在操作中绑定(bind)到基类。任何不在基类上的东西都将被丢弃。如果您需要 InheritanceClass
,则必须绑定(bind)到 InheritanceClass
。
关于c# - 使用基类并拥有从其继承的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58823193/