我有一个将从.net框架移植到.net核心的MVC Web应用程序。该应用程序的一部分具有一个视图模型,该视图模型具有许多属性,其中之一是“对象”类型。
在.net框架中,当我发布此视图模型数据时,控制器可以毫无问题地接收它。但是,在.net CORE中,除作为对象的属性外,所有属性均包含其期望值。
如果我将类型更改为字符串,则可以正常工作(但这意味着,如果该值曾经是一个int(例如),它将是int的字符串表示形式。)
有人知道我如何获得视图模型属性的值,这些视图模型属性是可以工作的对象类型,或者如果Core不支持这种方法呢?
答案 0 :(得分:0)
我真的不觉得这行得通。
模型绑定使用反射将请求数据,路由数据和查询字符串映射到您的操作方法的参数中。
请求数据本质上是所有字符串数据,因此defaultmodelbinder可以通过检查字符串是否可以成功转换为int或bool来将请求映射到任何简单的值类型,例如string,integer或bool。
包含一个简单值类型(例如字符串和整数)的复杂类型(例如Customer对象)也可以使用相同的方法进行映射。这样的复杂类型的示例如下所示:
.box-cont {
justify-content: center;
align-items: center;
display: flex;
height: 100%;
width: 100%;
position: relative;
min-height: 500px;
min-width: 500px;
}
.inner-red {
background: #ed0e0e;
padding: 50px;
}
.inner-pink {
background: #ff00005c;
padding: 50px;
}
.top-right,
.top-left,
.bottom-right,
.bottom-left,
.mid {
background: #fff;
border: 1px solid #000;
display: inline-flex;
padding: 50px;
position: absolute;
}
.top-right {
top: -75px;
right: -75px;
}
.bottom-right {
bottom: -75px;
right: -75px;
}
.bottom-left {
bottom: -75px;
left: -75px;
}
.top-left {
top: -75px;
left: -75px;
}
因为defaultmodelbinder使用反射,所以我真的看不到如何知道如何映射到“ object”类型的属性,该属性可以是任何东西。
对象可能是客户,int,字符串等,因此,无论使用什么版本的MVC,我都认为这将失败,因为我看不到defaultmodelbinder如何知道数据是否可以移植到对象中数据类型。这是有关MVC核心中的模型绑定及其工作方式的详细文章。
https://docs.microsoft.com/en-us/aspnet/core/mvc/models/model-binding?view=aspnetcore-2.2
作为一项额外的检查,我还将查看您是否在较旧的应用程序中运行了mvc默认模型绑定程序,以及是否有人没有使用自定义模型绑定程序,这可能会使这种绑定发生在您的旧版应用程序中。