Html.TextBox()抛出System.NullReferenceException

时间:2009-12-10 22:24:04

标签: asp.net-mvc nullreferenceexception

当我调用其中一个控制器的编辑操作时,我收到此错误。

以下是编辑操作方法的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,而不仅仅是显示它们。

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

我认为blue_fenix在他的回答中有一个观点。看来你没有设置模型 这里:

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

在这里:

catch
        {
            return View();
        }

您需要返回Model,因为HTML Textbox Helper正在查看一个不能为null的Model。在每种情况下,尝试返回相同的绑定模型:

return View(detailToEdit);