将模型的附加参数传递给View

时间:2014-05-30 06:52:10

标签: c# asp.net-mvc

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

我想要达到的目标是这样的,但参数超载不允许额外的'参数。

 @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
    }

有没有更好的方法来实现这一目标?

亲切的问候

3 个答案:

答案 0 :(得分:2)

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

RedirectToAction 会发送一个HTTP 302,其中包含根据您的路线信息生成的位置信息(在您的情况下,这将是 DetailViewById 的网址,其中 productId 作为参数或网址的一部分 - 取决于您的路由配置。)

如果您需要保留客户端提交的 ViewModel 并在用户请求重定向操作后对其进行操作,那么我建议您使用 TempData ,用于请求持久存在此类数据。

答案 1 :(得分:1)

通常,ViewModel是您从数据库(DTO)返回的内容以及您需要TO和FROM View的额外位数的组合。

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

答案 2 :(得分:1)

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

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