2010-01-15 3 views
0

У меня есть простая форма, которая вставляет новую категорию с указанным parentID (ServiceID).
и мои родительские отношения ребенка это;

Сервис> КатегорияВставка данных на основе ParentID, странное поведение ASP.NET MVC?

мой URL для создания Категории на основе ServiceID это за
/администратор/Категории/Создать/3 => "3 является ServiceID"

и моим Метод действия это

[AcceptVerbs(HttpVerbs.Post)] 
     public ActionResult Create(int? id, Category category) 
     { 
      if (ModelState.IsValid) 
      { 
       try 
       { 
        category.Service = dbService.GetAll().WithServiceId(id.Value).SingleOrDefault(); 
        dbCategory.Add(category); 
        dbCategory.Save(); 
        return RedirectToRoute("List_Categories", new { ServiceId = id.Value }); 
       } 
       catch 
       { 
        ModelState.AddRuleViolation(category.GetRuleViolations()); 
       } 
      } 
      return 
       View .... 

Я использую LinqToSql для действий db. В любом случае здесь начинается странная часть. Когда я сохраняю данные, он вставляет данные в таблицу Service вместо того, чтобы вводить данные только в таблицу категорий, а данные, вставленные в таблицу категорий, имеют новый вставленный ServiceID.

Это проблема с ASP.NET MVC ModelBinder или я делаю ошибку, которую я не вижу?
Я использовал LinqToSql в нескольких проектах и ​​никогда не имел такой проблемы

ответ

1

Это может быть ошибка в настройке LINQ To SQL. Является ли идентификатор службы автогенерированным полем в БД - он помечен как таковой в классах LINQ to SQL? Отключает ли ваша служба от контекста данных, а затем не присоединяет его перед отправкой? Если да, попробовали ли вы добавить категорию в службу и затем сохранить обновленную услугу?

var service = ... 
    service.Categories.Add(category); 
    service.Save(); 
+0

Да, ServiceID автогенерируется и помечен в классах LinqToSQL. И перед сохранением категории он отключен от datacontext. Я вытащил сервис из db для Categor.Service –

+0

Я попытался добавить службу категории через службу, и она сработала. Но когда я пытаюсь сохранить категорию с родительским сущностью, она вставляет новую Сервис и категорию с новым добавленным идентификатором serviceID –

+0

Я подозреваю, что он не знает, что это тот же сервис, что и извлеченный. Прежде чем пытаться сохранить категорию, ее необходимо привязать к контексту данных. – tvanfosson

1

Откуда возникает объект вашей категории? Как я вижу, вы полагаетесь на привязку модели ASP.NET MVC для ее предоставления, но для этого вам нужна форма где-то, чтобы сделать POST. Это также поможет увидеть форму.

Также лично я использую FormCollection (а не классы бизнес-моделей) в своих сигнатурах действий, а затем вытаскиваю опубликованные данные из FormCollection самостоятельно. Coz рано или поздно вы получите несколько сложных объектов с различными отношениями «один ко многим», «многие ко многим», которые «Модель привязки» просто не заберет, и вы должны сами создать его.

+0

Спасибо за ваш ответ, независимо от того, что я сделал, я не смог его решить. Речь идет о datacontext. Вместо этого
category.Service = dbService.GetAll(). WithServiceId (id.Value) .SingleOrDefault(); Я сделал это
category.ServiceID = id.Value; –

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