0

当我调用我的一个控制器的编辑操作时出现此错误。

这是 Edit 操作方法的 C# 代码

   [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult Edit(cedetails detailToEdit)
    {
        validateDetail(detailToEdit);
        if (!ModelState.IsValid)
            return View();

        try
        {
            var originaldetail = (from d in entity1.cedetails
                                  where d.detail_id == detailToEdit.detail_id
                                  select d).FirstOrDefault();
            entity1.ApplyPropertyChanges(originaldetail.EntityKey.EntitySetName, detailToEdit);
            entity1.SaveChanges();
            return RedirectToAction("Index");
        }
        catch
        {
            return View();
        }
    }

这是 validateDetail 方法:

protected void validateDetail(cedetails detailToValidate)
{

    if (detailToValidate.c_name.Trim().Length == 0)
        ModelState.AddModelError("c_name", "C name is required.");
        ModelState.SetModelValue("c_name", ValueProvider["c_name"]);
    if (detailToValidate.a_server.Trim().Length == 0)
        ModelState.AddModelError("a_server", "A server is required.");
        ModelState.SetModelValue("a_server", ValueProvider["a_server"]);
    if (detailToValidate.d_server.Trim().Length == 0)
        ModelState.AddModelError("d_server", "D server is required.");
        ModelState.SetModelValue("d_server", ValueProvider["d_server"]);
    if (detailToValidate.l_server.Trim().Length == 0)
        ModelState.AddModelError("l_server", "L server is required.");
        ModelState.SetModelValue("l_server", ValueProvider["l_server"]);
    if (detailToValidate.url.Trim().Length == 0)
        ModelState.AddModelError("url", "URL is required.");
        ModelState.SetModelValue("url", ValueProvider["url"]);
    if (detailToValidate.s_id.Trim().Length == 0)
        ModelState.AddModelError("s_id", "S ID is required.");
        ModelState.SetModelValue("s_id", ValueProvider["s_id"]);
}

我在这一行得到错误:

<%= Html.TextBox("c_name", Model.c_name) %>  

异常详细信息: System.NullReferenceException:对象引用未设置为对象的实例。

我已经搜索了这个错误并遇到了几个解决方案,但没有一个对我有用。请让我知道这是否可以解决。我还要补充一点,我选择隐藏视图中的某些表列,包括 detail_id,而不仅仅是显示它们。

4

2 回答 2

2

您的索引操作是否设置了模型?编辑操作不在任何地方,因此如果未在索引操作中设置模型(ala return View(cedetials)),则模型将为空。

于 2009-12-10T22:28:23.303 回答
0

我认为 blue_fenix 的回答很有道理。看来您没有在此处设置模型:

if (!ModelState.IsValid)
            return View();

和这里:

catch
        {
            return View();
        }

您需要返回模型,因为 HTML 文本框助手正在观察一个不能为空的模型。在每种情况下,尝试返回相同的绑定模型:

return View(detailToEdit);
于 2009-12-11T05:19:59.073 回答