0

我尝试使用 viewmodel 显示我的数据,但我有这样的错误

传入字典的模型项的类型为“System.Collections.Generic.List`1[XNet.Repository.Model.FacilityViewModel]”,但该字典需要“XNet.Repository.Model.FacilityViewModel”类型的模型项。

我怎样才能解决我的问题??这是我的代码

我的服务

public List<FacilityViewModel> GetViewHotel(int HotelID)
        {
            List<Hotel> Hotels = (from d in _HotelRepository.All()
                                  where d.HotelID == HotelID
                             select d).ToList();

            List<FacilityViewModel> facilityViewModel = new List<FacilityViewModel>();

            foreach (Hotel hotel in Hotels)
            {
                facilityViewModel.Add(new FacilityViewModel
                {
                    HotelID = HotelID,
                    HotelName = hotel.HotelName,
                    Address1 = hotel.Address1,
                    Address2 = hotel.Address2,
                    HotelDescription = hotel.HotelDescription,
                    HotelInformation = hotel.HotelInformation,
                });
            }

            return facilityViewModel;
        }

我的控制器

public ActionResult Index()
        {
            //var x = _hotelService.GetByID(_HotelID);
            List<FacilityViewModel> facilityViewModel = _viewService.GetViewHotel(_HotelID);
            return View(facilityViewModel);
        }

我的视图模型

public class FacilityViewModel
    {
        public int HotelID { get; set; }
        public string HotelName { get; set; }
        public string Address1 { get; set; }
        public string Address2 { get; set; }
        public string HotelDescription { get; set; }
        public string HotelInformation { get; set; }

    }

我的观点

@model XNet.Repository.Model.FacilityViewModel

@{
    ViewBag.Title = "Index";
}

<h2>Index</h2>

<fieldset>
    <legend></legend>

    <div class="display-label">
         @Html.Label("Hotel ID")
    </div>
    <div class="display-field">
        @Html.DisplayFor(model => model.HotelID)
    </div>
    <br />

    <div class="display-label">
         @Html.Label("Hotel Name")
    </div>
    <div class="display-field">
        @Html.DisplayFor(model => model.HotelName)
    </div>
    <br />

    <div class="display-label">
         @Html.Label("Address 1")
    </div>
    <div class="display-field">
        @Html.DisplayFor(model => model.Address1)
    </div>
    <br />

     <div class="display-label">
         @Html.Label("Address 2")
    </div>
    <div class="display-field">
        @Html.DisplayFor(model => model.Address2)
    </div>
    <br />

     <div class="display-label">
         @Html.Label("Hotel Description")
    </div>
    <div class="display-field">
        @Html.DisplayFor(model => model.HotelDescription)
    </div>
    <br />

     <div class="display-label">
         @Html.Label("Hotel Information")
    </div>
    <div class="display-field">
        @Html.DisplayFor(model => model.HotelInformation)
    </div>
    <br />
    <br />

</fieldset>

<br />
<input style="width:100px;" type="button" title="EditHotelDetail" value="EditDetails"  onclick="location.href='@Url.Action("Edit", "Hotel", new { HotelID = Model.HotelID})'" />
4

2 回答 2

2

错误消息说明了一切。当您从操作FacilityViewModel返回 List of 时,您的视图将模型键入为的实例FacilityViewModel

在您看来:

@model XNet.Repository.Model.FacilityViewModel

在你的行动中:

List<FacilityViewModel> facilityViewModel = _viewService.GetViewHotel(_HotelID);
return View(facilityViewModel); //<-- This is a list.

任何一个

return View(facilityViewModel.First()) //just an example to show a single instance.

或者

修改代码以处理视图中的列表。

于 2013-05-29T03:29:41.543 回答
1

您将 View 的模型声明为:

@model XNet.Repository.Model.FacilityViewModel

代替:

@model List<XNet.Repository.Model.FacilityViewModel>

在您的控制器的操作中,您将一个列表返回给视图。

修改模型以List<FacilityViewMOdel>在视图中获取一个或将单个返回FacilityViewModel到视图。

return View(facilityViewModel.FirstOrDefault());
于 2013-05-29T03:29:30.653 回答