将模型的附加参数传递给视图

本文关键字:参数传递 视图 模型 | 更新日期: 2023-09-27 18:05:47

还在学习Mvc所以抱歉,如果这个问题有点奇怪。我在我的控制器方法中传递模型,并希望传递一个额外的参数。

我想要实现的是类似这样的东西,但是参数重载不允许'附加'参数。

 @using (Html.BeginForm("SubmitCall", "Home", new { Id = Model.ProductDetail.ProductId }))

然后在控制器

public ActionResult SubmitCall(ViewModel model, int Id)
    {
        return RedirectToAction("DetailViewById", model, new {productId = Id});//not allowed
    }

是否有更好的方法来实现这一点?

亲切问候

将模型的附加参数传递给视图

如果您唯一的目的是将客户端重定向到另一个URL,那么上述场景不是实现此目的的正确方法。

RedirectToAction将发送一个HTTP 302,其中包含从您的路由信息生成的位置信息(再次,在您的情况下,这将是URL到DetailViewByIdproductId作为URL的参数或一部分-取决于您的路由配置)。

如果你需要持久的ViewModel,这是由客户端提交的,一旦用户请求你的重定向操作,然后我建议使用TempData,这是专为这种数据的请求之间的持久性。

通常,ViewModel是您从数据库(DTO)返回的内容+您需要从视图和从视图返回的额外比特和片段的组合。

所以在我看来,你应该添加这个额外的属性到你的Viewmodel

为参数创建一个匿名对象:

return RedirectToAction("DetailViewById",
    new {
            productId = Id,
            model.Property1,
            model.Property2,
            ...
        });