我是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样本网站,我会非常感激。
答案 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" />
这给出了相同的结果。