【发布时间】:2013-03-19 18:29:32
【问题描述】:
所以我正在尝试更新模型。以下是我的模型的设置方式:
public class Event{
public int Id {get;set;}
public string Name {get;set;}
public DateTime Date {get;set;}
public int Organizerid {get;set;}
public virtual User Organizer {get;set;}
}
public class Organizer{
public int Id {get;set;}
public string Name {get;set;}
pubilc virtual iCollection<Event> Events {get;set;}
}
现在我为事件 (EventViewModel) 创建了一个 ViewModel,因为每当我返回常规事件时,它都会在我身上抛出一个循环错误,我必须在我拉出的每个模型上的每个虚拟机上使用 [JsonIgnore]向上。此外,它还可以防止 web api 返回有关当前模型的过多信息。不需要的信息。
我的视图模型
public class EventVM {
public string Name {get;set;}
public DateTime Date {get;set;}
}
话虽如此,这就是我处理 PUT 的方式
[HttpPut]
public HttpResponseMessage Put(int eventId, EventVM event)
{
if (ModelState.IsValid && eventId== event.Id)
{
try
{
Event upEvent = dbcontext.Event.FirstOrDefault(e => e.Id == eventId);
upEvent.Name = eventVM.Name;
upEvent.Date = eventVM.Date;
dbcontext.SaveChanges();
return Request.CreateResponse(HttpStatusCode.OK);
}catch(Exception ex){
return Request.CreateResponse(HttpStatusCode.BadRequest);
}
}
else
{
return Request.CreateResponse(HttpStatusCode.BadRequest);
}
}
我的问题是它没有保存更新。我会做一个 TryUpdateModel 但它似乎不能与 WebApi 一起使用。帮助!想法?
【问题讨论】:
-
您使用的是什么数据库? “icdb.SaveChanges()”我觉得应该是dbcontext.SaveChanges()吧?
-
我的错,我刚改了。来自另一个项目。
-
你调试了吗?我假设您正在使用实体框架。我认为你的代码对我来说看起来是正确的......只要确保你可以通过你传入的 id 检索事件
-
是的,我可以获取带有 id 的实例。它似乎并没有与上下文相关联。
-
问题是你的表单可能正在发帖,这已经在这里了,然后再看这里:stackoverflow.com/questions/8182620/… 作为旁注,你为什么不只是发布模型,或者使用tryupdatemodel 但使用 formcollection 形式而不是模型 TryUpdateModel
(formcollection);
标签: .net asp.net-mvc-4 asp.net-web-api wcf-web-api