我有一个简单的表单,它使用给定的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,从来没有像这样的问题
答案 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只是不会拾取,你必须自己构建它。