MVC3和Razor - 如何为隐藏字段设置动态值?

时间:2011-11-07 17:51:36

标签: forms asp.net-mvc-3 razor

我是Razor的初学者,有时我会遇到非常简单的事情。

我有这个foreach循环:

@foreach (dynamic item in ViewBag.EAList)
{
<li>
    @using (@Html.BeginForm("Duplicate, "Daily"))
    {
        <p>@item.AuthorComment</p>
        @Html.Hidden("EstadoDeAlmaID", @item.EAID)
        @Html.Hidden("PosterID", Session["id"].ToString())
        <input type="submit" value="Send" />
    }
</li>
}

这一行:

@Html.Hidden("EstadoDeAlmaID", @item.EAID)

不起作用,我不知道如何使它工作,我尝试了很多方法,没有@,带( - ),@( - )......

有人可以帮我在隐藏字段中显示动态值吗? 此外,如果有人知道一个好的Razor样本网站,我会非常感激。

6 个答案:

答案 0 :(得分:6)

我遇到了同样的问题,发现一个简单的演员解决了我的问题。

@ Html.Hidden(&#34; id&#34;,(string)ViewBag.ebook.isbn)

答案 1 :(得分:4)

在Razor中,一旦进入“C#land”,您就不再需要使用@符号作为前缀值。

这应该足够了:

@Html.Hidden("EstadoDeAlmaID", item.EAID)

查看涵盖语法的Scott Gu's article以获取更多帮助。

<强>更新

我还会在你的使用块中移动<li></li>,因为当你在代码块中包装HTML块时,Razor会更好。

此外,您的Html.BeginForm应该在您的循环之外。

@using (@Html.BeginForm("Duplicate, "Daily"))
{
    <ul>
        @foreach (? item in ViewBag.EAList)
        {
            <li>
                <p>@item.AuthorComment</p>
                @Html.Hidden("EstadoDeAlmaID", item.EAID)
                @Html.Hidden("PosterID", Session["id"].ToString())
                <input type="submit" value="Send" />
            </li>
        }
    </ul>
}

?循环中的foreach EAList是{{1}}中商品的类型。

答案 2 :(得分:2)

要避免扩展方法无法动态调度异常,请使用模型而不是ViewBag,这样您就不会使用dynamic个对象(这样可以避免所有不必要的在视图中进行转换,并且更符合MVC风格):

在您返回视图的操作中:

return View("ViewName", db.EAList.ToList());

在您看来,第一行应该是:

@model IEnumerable<EAListItem> //or whatever the type name is

然后就这样做:

@foreach(var item in Model)

答案 3 :(得分:1)

您收到错误消息“无法动态调度扩展方法”......这就是您的麻烦。

您应该声明循环变量不是动态类型,而是集合中的实际类型。然后从@ Html.Hidden()调用中的item.EAID调用中删除@。

答案 4 :(得分:0)

对我来说,简单的解决方案是使用ViewData而不是ViewBag。 ViewBag只是​​ViewData的动态包装器。

@Html.Hidden("ReportID", ViewData["ReportID"])

但我不知道这是否会对您的情况有所帮助,因为您在foreach循环中创建了动态项目。

答案 5 :(得分:0)

我发现当我想在HTML中使用视图包数据时 回归基础经常对我有用

<input type="hidden" name="Data" id="Data" value="@ViewBag.Data" />

这给出了相同的结果。