【问题标题】:How to display labels and textboxes with the help of model properties in MVC5 razor view with html helpers?如何在带有 html 助手的 MVC5 razor 视图中的模型属性的帮助下显示标签和文本框?
【发布时间】:2014-04-14 09:27:12
【问题描述】:

我无法在我的视图中使用带有 html 助手的模型创建标签和文本框。

我的视图语法:

  @using (Ajax.BeginForm("RoomsAvail",new AjaxOptions
                                {
                                  UpdateTargetId = "RoomsAvailData",
                                  InsertionMode ="InsertionMode.Replace"
                                }))                                                                                                             
 {
    <input type='text' id="Checkin" class="form-control datepicker" />
    <input type='text' id="Checkout" class="form-control datepicker" />
    <button type="submit" value="Search"></button>
 }
@model IEnumerable<RoomAvailabilitySummary>
 <div>
     @Html.LabelFor(model=>model.ARRDAT)
 </div>
 <div>
     @Html.EditorFor(model=>model.Name)
 </div>

我的模特

public class RoomAvailabilitySummary
{
   public string ARRDAT{get;set;}
   public string Name{get;set;}
}

这样做之后,我的视图不会将模型属性呈现到我的视图中以显示标签文本并获得错误为 “Syste.Collection.Generic.IEnumerable 不包含 ARRDAT 的定义”强>

为什么我无法在我的 html 助手中渲染模型属性以在 html 助手的帮助下显示名称?

我还想在控制器中访问我的模型值。我该怎么做?

【问题讨论】:

  • 你怎么能通过列表或IEnumerable直接访问字段!
  • 那么,这个的替代品是什么?

标签: asp.net-mvc razor html-helper


【解决方案1】:

你的模型是:

@model IEnumerable<RoomAvailabilitySummary>

而你试图在IEnumerable 中访问Name

 <div>
     @Html.EditorFor(model=>model.Name)
 </div>

如果是IEnumerable,你应该使用foreach,如果不是IEnumerable,你应该使用@model RoomAvailabilitySummary

添加:

这样的事情应该可以工作:

@model IEnumerable<RoomAvailabilitySummary>

@if(Model.Count() > 0)
{
 <div>
     @Html.LabelFor(model=>Model.First().Name)
 </div>
}

@foreach (var item in Model)
{
 <div>
     @Html.EditorFor(model=>item.Name)
 </div>
}

【讨论】:

  • 因为,我使用实体框架在数据库的同一视图中显示数据。所以,我必须使用 IEnumerable 来枚举我的内容。唯一的问题是无法在模型属性的帮助下显示名称。为什么?
  • @Arjun 你试图在IEnumerable 中找到Name 属性,而不是在RoomAvailabilitySummary 类中。
  • 我真的很抱歉,因为我正在学习 MVC。请帮助我如何显示模型属性(用于显示名称等的 html 助手)和使用模型的数据...这对我很有帮助。
  • @Arjun 查看Ashok Damani 的答案,将您的 div 放入代码块并将第二个 model 更改为 room
  • 但是,如果我这样做,它将多次显示我的项目。在这里,我想在模型属性的帮助下显示一次名称标签,并希望使用 foreach 多次显示名称。怎么做?希望,我很清楚这一点。如果没有,请告诉我。
【解决方案2】:

我认为你正在尝试迭代模型(列表):

@model IEnumerable<RoomAvailabilitySummary>
@Html.LabelFor(model => model[0].Name)
@foreach(var room in Model)
{
    <br />
    @Html.EditorFor(x => room.Name)
}

【讨论】:

  • 是的 Ashok ...我的意图是我想显示来自 DB 的名称值的名称。正如你所说,我正在使用 foreach 迭代我的数据库内容。但是,我也想在同一个视图中显示我的模型属性。如果不使用 IEnumaerate,我们将无法迭代项目。那么,如何进行呢?
  • 请把foreach改为@foreachmodel改为Model
  • 名称标签我想使用来自 db 的显示属性和名称值从模型中显示一次我想根据使用 foreach 的项目数显示多次。怎么做?希望,我对这个 Ashok 很清楚。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-19
  • 1970-01-01
  • 2020-02-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多