ASP MVC Edit Post Function具有null参数

时间:2011-06-01 16:07:10

标签: asp.net-mvc-3

我正在尝试根据教程创建一个非常基本的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

1 个答案:

答案 0 :(得分:2)

确保MyDatabaseObject视图上的值位于表单内。验证这些值是否正在过帐 - 检查Request.Form或使用更改方法签名来使用

FormsCollection collection
只是为了验证值是否已发布。如果它选择该方法 - 它应该将属性与表单字段匹配 - 通常非常简单。