基于ParentID插入数据,ASP.NET MVC的奇怪行为?

时间:2010-01-15 12:03:33

标签: asp.net-mvc linq-to-sql

我有一个简单的表单,它使用给定的parentID(ServiceID)插入一个新的类别 我父母的关系就是这个;

服务>分类

我根据ServiceId创建类别的网址是这个 / Admin / Categories / Create / 3 => “ 3是serviceID

我的Action方法是这个

[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进行数据库操作。无论如何,奇怪的部分从这里开始。 当我保存数据时,它会将数据插入到Service表中,而不是仅将数据插入到Category Table中,并且插入到Category Table的数据具有新插入的ServiceID。

它是ASP.NET MVC ModelBinder的问题还是我做错了,我没看到?
我在几个项目中使用过LinqToSql,从来没有像这样的问题

2 个答案:

答案 0 :(得分:1)

在LINQ To SQL设置中可能出错。服务标识是DB中的自动生成字段 - 它是否在LINQ to SQL类中标记为?您的服务是否将其与数据上下文断开连接,然后在提交之前不重新附加?如果是,您是否尝试将该类别添加到服务,然后保存更新的服务?

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

答案 1 :(得分:1)

您的Category对象来自哪里?正如我所看到的,你依靠ASP.NET MVC模型绑定来提供它,但为此你需要一个表单来进行POST。它也有助于查看表格。

另外,我个人更喜欢在我的操作签名中使用FormCollection(而不是业务模型类),然后自己从FormCollection中提取已发布的数据。 Coz迟早会得到一些复杂的对象,这些对象具有各种一对多,多对多的关系,Model Binding只是不会拾取,你必须自己构建它。