使用基类并具有从其继承的类

我有一个基类:

public class Baseclass
{
    public string Name { get; set; }
    public string LastName { get; set; }
}

从Baseclass继承的类:

public class Inheriteclass : Baseclass
{
    public string MyProperty { get; set; }
}

因此,您需要在第一个视图中填写“名称”和“姓氏”,然后单击“下一步”,然后转到具有更多字段的另一个视图。

但是当我在该视图中单击“提交”按钮时,属性“名称”和“姓氏”为空...

首页“下一步”按钮:

    public IactionResult GoToCategoryView(Baseclass baseclass)
    {
        return RedirectToaction("NextView",baseclass);
    }

下一个视图有:

@model Inheritanceclass

当我单击“提交”按钮时:

    public IactionResult SubmitThis(Inheritanceclass inheritanceclass )
    {
        var testClass = new testClass
        {
            Name = inheritanceclass.Name,LastName = inheritanceclass.LastName,MyProperty = inheritanceclass.MyProperty
        };

        return View(testClass);
    }

更新 样品更清晰。在上面的示例中,“名称”和“姓氏”为空。

jzq871001 回答:使用基类并具有从其继承的类

通过请求调用动作与在类上调用方法不是一样。在后一种情况下,您的内存中已经有一个InheritanceClass,您只需将其上载到BaseClass。然后,当然,稍后,您可以将其向下转换回InheritanceClass,因为它就是这样。

对于一个操作,参数是从请求中提供的,它只是非结构化,未绑定的数据。使用Modelbinder尝试将数据“绑定”到实际的结构化类型。为此,它会检查参数的类型并实例化该类型的 (即BaseClass)。然后,它将数据从请求映射到该类实例上的适当属性。不过重要的是,BaseClass没有MyProperty属性,因此modelbinder将丢弃该值。最后,您只拥有一个BaseClass实例,因为这就是参数的类型。如果愿意,您可以向下转换到InheritanceClass,但是特定于InheritanceClass的任何属性都将为null或默认值,因为它们在BaseClass上不存在。

总之,您不能在操作中绑定到基类。任何不在基类上的东西都将被丢弃。如果需要InheritanceClass,则必须绑定到InheritanceClass

本文链接:https://www.f2er.com/3115687.html

大家都在问