2010-03-21 4 views
1

Я уже начал аналогичный topic, но до сих пор не нашел окончательного решения ... Итак, вот я с новым :) ... Я разрабатываю NerdDinner с нуля и теперь Я пришел к выводу, где я определяю DinnerViewModel.
После these instructions (начиная с листинга 5) Я пришел к этому:
ASP.NET MVC Проблема с Viewmodel

namespace Nerd.Controllers 
{ 

    // View Model Classes 

    public class DinnerViewModel 
    { 
     public DinnerViewModel(List<Dinner> dinners) 
     { 
      this.Dinners = dinners; 
     } 

     public List<Dinner> Dinners { get; private set; } 

    } 

    public class DinnerController : Controller 
    { 
     private DinnerRepository dinnerRepository = new DinnerRepository(); 

     .... 

     public ActionResult NewDinners() 
     { 
      // Create list of products 
      var dinners = new List<Dinner>(); 
      dinners.Add(new Dinner(/*Something to add*/)); 

      // Return view 
      return View(new DinnerViewModel(dinners)); 
     } 


    } 
} 

Кроме того, Dinner таблица в этой новой версии NerdDinner немного укоротить (он содержит от DinnerID, Title, EventDate и Description полей).

Независимо от того, что я пытаюсь добавить здесь dinners.Add(new Dinner(/*Something to add*/)); я всегда получаю следующее сообщение об ошибке

Ошибка 1 «Nerd.Model.Dinner» не содержит конструктор, который принимает «1» аргументы C: \ Документы и Settings \ Ilija \ Мои документы \ Визуальная Студия 2008 \ Projects \ Nerd \ Nerd \ Контроллеры \ DinnerController.cs 150 25 Nerd

Потому что я общая beginne r в C# и вообще OOP, я понятия не имею, что здесь делать ... Полагаю, мне нужно объявить конструктор, но как и где именно?

Спасибо,
Ile

+1

Если вы новичок в C# и программирование в общем, я настоятельно рекомендую не начинать с чего-то, что было разработано как приложения MVC. Сначала вы должны понять основные понятия. Вы все равно можете сделать очень много прогресса, но не начинайте посередине игры. Я был на той дороге - это может быть неприятно и крайне неэффективно. Это на самом деле просто означает хороший совет, я не хочу отговаривать вас. – mnemosyn

+1

Я знаю, что вы имеете в виду, но я получил диплом бакалавра по созданию CMS в ASP.NET MVC, поэтому при переходе с (процедурного) PHP на OOP C# я не был полным новичком в программировании, только этот ООП сейчас создает проблемы :) Спасибо за совет –

ответ

2

Если вы хотите, чтобы инициализировать значения в новом объекте Dinner, используйте эту конструкцию

dinners.Add(new Dinner() { Title = "DinnerTitle", Description = "DinnerDescription" }); 
+0

Вот оно! Я все время пытался с помощью обычных кронштейнов, так как никогда не думал об этом, чтобы попробовать фигурные скобки. Благодаря! –

1

Сообщение об исключении говорит все это. Ваш объект Dinner не имеет конструктора, который принимает 1 аргумент. Таким образом, вы не можете сделать это:

new Dinner(someVariable) 

Потому что нет никакого способа в Dinner класса, который позволяет создать объект ужин с одним аргументом.

+0

, поэтому мне нужно создать новый (я полагаю, частично) класс Dinner.cs и создать метод конструктора? –

+0

@ile, либо вам нужно создать конструктор класса Dinner, который принимает 1 аргумент, либо вам придется использовать существующий его конструктор при создании ViewModel. –

+0

LukLed дал мне ответ, который я искал. Я не знаю точно, что вы имели в виду с этим существующим конструктором –

1

Если вы следовали за ужином «ботанический ужин», вы, вероятно, использовали Linq2Sql, а сгенерированный по умолчанию код определял Dineer с беспараметричным конструктором (метод «Ужин»() »).

Вместо этого вы можете использовать свойства для установки значений объекта:

Dinner dinner = new Dinner; 
dinner.Title = "My dinner"; 
dinner.Description ="..."; 
// etc. 
+0

Я следил за уроком ужина, и все это в разделе «Тесты», но, как я уже сказал, я здесь совершенно новый, и я не мог поймать все это с первого. Есть некоторые вещи по-другому, чем я хотел бы ... –

+0

Я делаю это раньше, но тогда я не могу передать объект обеда следующим образом: return View (новый DinnerViewModel (ужин)); –

Смежные вопросы