在 URL.Action 中传递视图模型
Passing a View Model within a URL.Action
我正在尝试将视图模型传递给我的控制器。
@if (User.IsInRole("Customer"))
{
<input type="button" class="btn btn-danger" value="Rent Car" onclick="location.href='@Url.Action("PassingCar", "Bookings", new { id = item.VehicleID, Model = Model.Booking })'" />
}
我正在使用动态模型,因此我可以在此视图中同时使用 Vehicle 和 Booking。
当代码到达我的控制器时,ID 已被传递,但 ViewModel 中的数据消失了。
public ActionResult PassingCar( int id, CreateBookingViewModel createdModel)
{
///Checks that Vehicle exists in DB and v property is not null
if (v == null)
{
return HttpNotFound();
}
else
{
/// sets the Vehicle attribute of the BookingViewModel to vehicle passed over
createdModel.Vehicle = v;
}
return RedirectToAction("Create", "Bookings");
}
如果有人知道我做错了什么,将不胜感激。
你能post你最终URL的文本吗?
但据推测,您可能希望将 Model = Model.Booking 替换为 Model = JSON.Encode(Model.Booking)
哦。还有一个概率。您在 Url 操作中将参数命名为 "Model",但在方法签名中将参数命名为 "createdModel"。
我发现了我的问题,所以我要 post 回答任何遇到同样问题的人,并找到这个话题。
因为 URL 操作中的两个名称都称为 Model,这将创建一个传递给视图的全新 ViewModel。这是因为在我的视图中,该模型是我创建的动态模型,因此正在创建的对象是一个新的 ExpandoObject。
一个解决方案是将 ExpandoObject 转换为正确的类型,但我发现了一种不同的方法来解决我的特定问题,只需使用 TempData。无论哪种方式都会奏效。
我正在尝试将视图模型传递给我的控制器。
@if (User.IsInRole("Customer"))
{
<input type="button" class="btn btn-danger" value="Rent Car" onclick="location.href='@Url.Action("PassingCar", "Bookings", new { id = item.VehicleID, Model = Model.Booking })'" />
}
我正在使用动态模型,因此我可以在此视图中同时使用 Vehicle 和 Booking。
当代码到达我的控制器时,ID 已被传递,但 ViewModel 中的数据消失了。
public ActionResult PassingCar( int id, CreateBookingViewModel createdModel)
{
///Checks that Vehicle exists in DB and v property is not null
if (v == null)
{
return HttpNotFound();
}
else
{
/// sets the Vehicle attribute of the BookingViewModel to vehicle passed over
createdModel.Vehicle = v;
}
return RedirectToAction("Create", "Bookings");
}
如果有人知道我做错了什么,将不胜感激。
你能post你最终URL的文本吗?
但据推测,您可能希望将 Model = Model.Booking 替换为 Model = JSON.Encode(Model.Booking)
哦。还有一个概率。您在 Url 操作中将参数命名为 "Model",但在方法签名中将参数命名为 "createdModel"。
我发现了我的问题,所以我要 post 回答任何遇到同样问题的人,并找到这个话题。
因为 URL 操作中的两个名称都称为 Model,这将创建一个传递给视图的全新 ViewModel。这是因为在我的视图中,该模型是我创建的动态模型,因此正在创建的对象是一个新的 ExpandoObject。
一个解决方案是将 ExpandoObject 转换为正确的类型,但我发现了一种不同的方法来解决我的特定问题,只需使用 TempData。无论哪种方式都会奏效。