我正在尝试根据教程创建一个非常基本的MVC应用程序。我使用的是默认路由,以及简单的视图和模型。
我遇到的问题是HttpPost编辑功能。我希望我的“MyObject”类型的对象作为参数传递,但它总是返回null。
以下是控制器中的编辑功能(Get功能正常工作):
public ActionResult Edit(int? id)
{
if (!id.HasValue)
return RedirectToAction("Index");
var item = (from obj in mDB.MyDatabaseObjects
where obj.Id == id
select obj).First();
return View(item);
}
//
// POST: /Main/Edit/5
[HttpPost]
public ActionResult Edit(MyDatabaseObject someObject)
{
var original = (from obj in mDB.MyDatabaseObjects
where obj.Id == someObject.Id
select obj).First();
if (!ModelState.IsValid)
return View(original);
mDB.ApplyCurrentValues(original.EntityKey.EntitySetName, someObject);
mDB.SaveChanges();
return RedirectToAction("Index");
}
请注意,我的(几乎相同)Create方法按预期工作:
[HttpPost]
public ActionResult Create([Bind(Exclude="Id")] MyDatabaseObject newObject)
{
if (!ModelState.IsValid)
return View();
int max = mDB.MyDatabaseObjects.Max(data => data.TaskOrder);
newObject.TaskOrder = max + 1;
mDB.AddToMyDatabaseObjects(newObject);
mDB.SaveChanges();
return RedirectToAction("Index");
}
谢谢,
WTS
答案 0 :(得分:2)
确保MyDatabaseObject视图上的值位于表单内。验证这些值是否正在过帐 - 检查Request.Form或使用更改方法签名来使用
FormsCollection collection只是为了验证值是否已发布。如果它选择该方法 - 它应该将属性与表单字段匹配 - 通常非常简单。