Asp.net mvc ASP.NET MVC子属性';s反序列化
我的项目TaskViewModel的相同子属性有两个相同的DropDownListAsp.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
@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
的类不会成功。您可以显示视图模型吗?