Razor中的奇怪分配行为

时间:2013-06-29 21:27:21

标签: asp.net-mvc asp.net-mvc-4 razor

在表单中,我试图在隐藏字段中保留多个值:

@using (Html.BeginForm("Report", "Product", FormMethod.Post))
{
    @Html.HiddenFor(m => m.Id) // <-- sets always the Id of subsequent ProductId
    @Html.HiddenFor(m => m.ProductId)

    @Html.TextAreaFor(x => x.Comment, 5)

    <input type="submit" value="@StringResources.Product_Report" class="btn" />
}

无论在模型的Id字段中设置了哪个值,都会设置ProductId属性的值。当我在第一次分配我的代码片段时停止调试器时,一切似乎都没问题。但是Firebugs向我展示了ProductId属性的价值被接管了。

由于这是我的应用程序中的第二个问题,我认为这是框架中的一个错误。或者我做错了什么?

1 个答案:

答案 0 :(得分:0)

最后我得到了解决方案。这是我的GET控制器操作的一个接口:

public ActionResult Report(long id) // <-- this id is set in Razor
{
    var model = new ReportModel { ProductId = id };
    return View(model);
}

方法中的参数id正确productId。 Razor中Id属性的值(@Html.HiddenFor(m => m.Id)被方法参数覆盖。

所以解决方案很简单:

public ActionResult Report(long productId)
{
    var model = new ReportModel { ProductId = productId };
    return View(model);
}

我不知道这种行为对我而言看起来仍然很奇怪。这是设计还是框架中的错误?