在 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。无论哪种方式都会奏效。