Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc ASP.NET MVC子属性';s反序列化_Asp.net Mvc_Controller_Deserialization - Fatal编程技术网

Asp.net mvc ASP.NET MVC子属性';s反序列化

Asp.net mvc ASP.NET MVC子属性';s反序列化,asp.net-mvc,controller,deserialization,Asp.net Mvc,Controller,Deserialization,我的项目TaskViewModel的相同子属性有两个相同的DropDownList @Html.DropDownListFor(x => x.AssignedTo.ID, TaskHelper.GetUsersSelect(Model.AssignedTo), new { @class = "select" }) @Html.DropDownListFor(x => x.Controller.ID, TaskHelper.GetUsersSelect(Model.Controlle

我的项目TaskViewModel的相同子属性有两个相同的DropDownList

@Html.DropDownListFor(x => x.AssignedTo.ID, TaskHelper.GetUsersSelect(Model.AssignedTo), new { @class = "select" })

@Html.DropDownListFor(x => x.Controller.ID, TaskHelper.GetUsersSelect(Model.Controller), new { @class = "select" })
在过帐表单上发送两个值(…&AssignedTo.ID=1&Controller.ID=1…),但我总是只得到task.AssignedTo反序列化

  public ActionResult SaveTask(TaskViewModel task)
  {
      task.AssignedTo.ID //value here
      task.Controller.ID //null reference exception
  }

  public class TaskViewModel
  {
      public UserViewModel Controller { get; set; }
      public UserViewModel AssignedTo{ get; set; }
  }

  public class UserViewModel
  {
     public long ID { get; set; }
     public string Title { get; set; }
  }

出现这种奇怪行为的原因可能是什么?

看起来
Controller
是一个保留关键字,默认的模型绑定器不喜欢它。尝试重命名属性:

public class TaskViewModel
{
    public UserViewModel TaskController { get; set; }
    public UserViewModel AssignedTo { get; set; }
}
整个问题来自默认模型绑定器使用的ValueProvider。当遇到
控制器
导航属性时,它会执行以下操作:

var value = ValueProvider.GetValue("Controller");

不幸的是,它首先查看路由数据,然后查看查询字符串。因此,这将返回“Home”或控制器的任何名称,显然,尝试将字符串“Home”分配给类型为
UserViewModel
的类不会成功。

您可以显示视图模型吗?