类型对象的.net CORE视图模型属性未绑定

时间:2019-01-21 17:40:15

标签: c# model-view-controller asp.net-core

我有一个将从.net框架移植到.net核心的MVC Web应用程序。该应用程序的一部分具有一个视图模型,该视图模型具有许多属性,其中之一是“对象”类型。

在.net框架中,当我发布此视图模型数据时,控制器可以毫无问题地接收它。但是,在.net CORE中,除作为对象的属性外,所有属性均包含其期望值。

如果我将类型更改为字符串,则可以正常工作(但这意味着,如果该值曾经是一个int(例如),它将是int的字符串表示形式。)

有人知道我如何获得视图模型属性的值,这些视图模型属性是可以工作的对象类型,或者如果Core不支持这种方法呢?

1 个答案:

答案 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默认模型绑定程序,以及是否有人没有使用自定义模型绑定程序,这可能会使这种绑定发生在您的旧版应用程序中。