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

Set TextBox value from ViewBag list in MVC5 C#

如何从包含列表的 ViewBag 中设置 MVC5 中的 TextBox 值?如您所见,我的列表在 Viewbag.photos 中,我想要 [=18= 的每个值]photo.id 在我的文本框中,然后将其传递给控制器​​

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

     }

尝试这样做时出现错误:

Error CS1973 'HtmlHelper>' has no applicable method named 'TextBox' but appears to have an extension method by that name. Extension methods cannot be dinamically dispached.

也许还有其他解决方法?

这是因为 ViewBag.photos 是一个 dynamic 对象。编译器无法知道它的类型,因此您必须手动将其转换为原始类型。

例如:

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

作为旁注(我不确定这是否会阻止您的代码工作,但无论如何这是一个很好的做法),您也有太多 @s:引用 Visual Studio, once inside code, you do not need to prefix constructs like "if" with "@".所以您的最终代码将如下所示:

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

您还应该考虑使用 ViewModel 而不是 ViewBag 在控制器和视图之间传递数据。