ASP MVC 2未经编辑的字段返回null

时间:2010-03-06 08:27:23

标签: asp.net-mvc

我有一个带有两种编辑方法的控制器(见下文)。当我提交视图时,quoteOption中未通过输入控件发回的任何属性都是空的。例如,在quoteOption中我有quoteOptionID - 我没有显示或可编辑。 quoteOptionToUpdate中该属性为空(设置为0)。如果我为QuoteOptionID添加一个文本框,那么它可以工作。

public ActionResult Edit(long id)
{
    quoteOption = quoteService.GetQuoteOptionByID(id); 
    return View("Create",quoteOption);
}

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Edit(QuoteOption quoteOptionToUpdate)
{
    quoteService.UpdateQuoteOption(quoteOptionToUpdate);  //quoteOptionID is null
    return RedirectToAction("Index");
}

2 个答案:

答案 0 :(得分:2)

在典型的应用程序中,由于Web的无状态,您需要来回传输字段值。例如,您可以简单地将值放在隐藏字段中。

<input type="hidden" name="QuoteOptionID" value="...." />

请注意,这会将ID公开给用户。

您还可以在服务器端存储某些会话信息并使用自定义模型绑定器,以便您的应用程序有效地知道用户上次做了什么,但我不建议这样做。

答案 1 :(得分:0)

如果您这样写,您将单独获取id(因为它只存在于查询字符串中而不是您的表单中)。

[HttpPost]
public ActionResult Edit(QuoteOption quoteOptionToUpdate, Long id)

在edit-method中,您可以将id分配给quoteOptionToUpdate:

quoteOptionToUpdate.Id = id;