[英]ASP.NET MVC 5 ViewModel Binding
我無法在控制器的ViewModel中綁定從服務中獲取的數據(事件)。 沒有ViewModel可以正常工作。
領域模型
namespace Tournament.Model
{
public class Event
{
public int EventID { get; set; }
public string Name { get; set; }
public DateTime StartDate { get; set; }
public DateTime EndDate { get; set; }
public string Geolocation { get; set; }
public string Address { get; set; }
public string City { get; set; }
public string State { get; set; }
public string Country { get; set; }
public string Description { get; set; }
public string Type { get; set; }
public virtual List<Team> Teams { get; set; }
}
}
我只需要幾個屬性即可: ViewModel
namespace Tournament.Web.ViewModel.EventViews
{
public class EventIndexViewModel
{
public int EventIndexViewModelID { get; set; }
public string Name { get; set; }
public DateTime StartDate { get; set; }
public DateTime EndDate { get; set; }
public string City { get; set; }
}
}
現在在控制器中我有這個(我省略了服務初始化部分-正常工作)。 因此,事件保存事件列表(來自域模型)。
public ActionResult Index()
{
//Create list of Events
var events = eventService.GetEvents();
//Search events
//Add _eventService Event details to var event
var model = new EventIndexViewModel();
List<EventIndexViewModel> modelList = new List<EventIndexViewModel>();
foreach (var Event in events)
{
events.Add(new Event {
Name = model.Name,
StartDate = model.StartDate,
EndDate = model.EndDate });
modelList.Add(model);
}
return View(modelList);
}
}
}
基於ViewModel生成標准列表視圖,並得到:
Server Error in '/' Application.
Collection was modified; enumeration operation may not execute.
Source Error:
Line 36: List<EventIndexViewModel> modelList = new List<EventIndexViewModel>();
Line 37:
**Line 38: foreach (var Event in events)**
Line 39: {
Line 40: events.Add(new Event {
UPDATE -SOLUTION:現在正在工作的控制器:
public ActionResult Index()
{
//Create list of Events
var domainEvents = eventService.GetEvents();
//Add domain Events to ViewModel Event properties
var eventViewModel = new EventIndexViewModel();
List<EventIndexViewModel> eventListViewModel = new List<EventIndexViewModel>();
foreach (var domainEvent in domainEvents)
{
eventListViewModel.Add(new EventIndexViewModel
{
Name = domainEvent.Name,
StartDate = domainEvent.StartDate,
EndDate = domainEvent.EndDate });
}
return View(eventListViewModel);
}
更新2-更短,我猜想用LINQ更好的方法
public ActionResult Index()
{
//Create list of Events
var domainEvents = eventService.GetEvents();
//Search events
//Add domain Event list to ViewModel list
var eventListViewModel = domainEvents.Select(
x => new EventIndexViewModel()
{
Name = x.Name,
StartDate = x.StartDate,
EndDate = x.EndDate,
City = x.City
})
.ToList();
return View(eventListViewModel);
}
您要向自身添加一個集合:
foreach (var Event in events)
{
events.Add(new Event {
//...
那么,對於每個event
您都想添加一個event
? 也許您是想向modelList
添加元素?
foreach (var Event in events)
{
modelList.Add(new EventIndexViewModel {
//...
(旁注:更modelList
命名策略將幫助您更輕松地識別問題modelList
並不能真正告訴您問題的所在。您可能正在使用events
變量,因為從語義modelList
,您應該使用事件。也許可以調用他們domainEvents
和viewEvents
?還有,命名變量Event
是類型的Event
只是自找麻煩。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.