从MVC5 C#中的ViewBag列表中设置TextBox值

时间:2017-05-04 14:35:27

标签: c# asp.net-mvc viewbag

如何在包含列表的ViewBag中设置MVC5中的TextBox值?正如您所看到的,我的列表位于 Viewbag.photos 中,我希望每个值都包含 photo.id 在我的TextBox中,然后将其传递给控制器​​

 @foreach (var photo in ViewBag.photos)
     {
            @if (@photo.comment != null)
            {
              <h6>@photo.comment</h6>
            }
            else
            {
              <h6> - </h6>
            }
            @Html.TextBox("photoID", @photo.id)

     }

尝试这样做我收到错误:

  

错误CS1973&#39; HtmlHelper&gt;&#39;没有适用的方法   命名&#39; TextBox&#39;但似乎有一个名称的扩展方法。   扩展方法不能以动态方式进行分析。

也许还有另一种解决方法?

1 个答案:

答案 0 :(得分:2)

这种情况正在发生,因为ViewBag.photosdynamic个对象。编译器无法知道其类型,因此您必须手动将其转换为其原始类型。

例如:

@Html.TextBox("photoID", (int)photo.id)

作为旁注(我不确定这是否会阻止您的代码工作,但无论如何都是好的做法),您也有太多@:引用Visual Studio,{{1 }}。所以你的最终代码如下:

once inside code, you do not need to prefix constructs like "if" with "@"

您还应该考虑使用ViewModels而不是 @foreach (var photo in ViewBag.photos) { if (photo.comment != null) { <h6>@photo.comment</h6> } else { <h6> - </h6> } @Html.TextBox("photoID", (int)photo.id) } 在控制器和视图之间传递数据。