簡體   English   中英

ASP.NET MVC 5 ViewModel綁定

[英]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 ,您應該使用事件。也許可以調用他們domainEventsviewEvents ?還有,命名變量Event是類型的Event只是自找麻煩。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM