在URL中传递视图模型

时间:2019-05-21 01:33:46

标签: c# asp.net model-view-controller asp.net-mvc-5 viewmodel

我正在尝试将视图模型传递给控制器​​。

 @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 })'" />

            }

我正在使用动态模型,因此可以在此视图中同时使用“车辆”和“预订”。

当代码到达我的控制器时,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");
        }

如果有人知道我在做什么错,将不胜感激。

2 个答案:

答案 0 :(得分:0)

您可以发布最终到达的URL的文本吗?

但是,您可能会想将Model = Model.Booking替换为Model = JSON.Encode(Model.Booking)

哦。还有另一种可能性。您在Url Action中将参数命名为“ Model”,但在方法签名中将参数命名为“ createdModel”。

答案 1 :(得分:0)

我发现了我的问题,所以我将为遇到相同问题的任何人发布答案,并找到该线程。

因为URL动作中的两个名称都称为Model,所以这将创建一个传递给视图的全新ViewModel。这是由于我的视图中的事实,该模型是我创建的动态模型,因此要创建的对象是新的ExpandoObject。

一种解决方案是将ExpandoObject强制转换为正确的类型,但是我发现仅使用TempData即可解决我的特定问题的另一种方法。无论哪种方式都行得通。