Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc Html.TextBox()引发System.NullReferenceException_Asp.net Mvc_Nullreferenceexception - Fatal编程技术网

Asp.net mvc Html.TextBox()引发System.NullReferenceException

Asp.net mvc Html.TextBox()引发System.NullReferenceException,asp.net-mvc,nullreferenceexception,Asp.net Mvc,Nullreferenceexception,我在调用某个控制器的编辑操作时出现此错误 下面是编辑操作方法的C代码 [AcceptVerbs(HttpVerbs.Post)] public ActionResult Edit(cedetails detailToEdit) { validateDetail(detailToEdit); if (!ModelState.IsValid) return View(); try {

我在调用某个控制器的编辑操作时出现此错误

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

您的索引操作是否设置了模型?编辑操作不在任何地方,因此如果模型没有在索引操作(alareturnview(ceditials))中设置,那么模型将为空。

我认为blue_fenix的答案中有一个要点。看来你不是在设定模型 在这里:

在这里:

catch
        {
            return View();
        }
您需要返回模型,因为HTML文本框帮助程序正在检查一个不能为null的模型。在每种情况下,请尝试返回相同的绑定模型:

return View(detailToEdit);

是的,模型在索引中设置如下:返回视图(entity1.cedetails.ToList());嗨,我现在明白蓝色菲尼克斯的意思了。我已经更改了action方法以在每个return语句中返回模型,现在我没有得到错误,但是页面会自动发布,而不是重定向到Index,并且更改不会反映在数据库中。当我调试编辑方法并“单步执行”时,我注意到entity1.ApplyPropertyChanges(originaldetail.EntityKey.EntitySetName,detailToEdit);这个语句没有被介入,它直接进入catch语句,该语句给出了相同的异常:Object引用没有设置为Object的实例很难判断出哪里出了问题,因为我不知道ApplyPropertyChanges在做什么,这两个参数中似乎有一个为null(最有可能是originaldetail)。有一件事我不明白,为什么你只发送“originaldetail.EntityKey.EntitySetName”而不是“originaldetail”,后者似乎与“detailToEdit”的类型相同。ApplyPropertyChanges方法将EntitySetName和更改的对象作为其参数。正如您所说,我已经尝试过了,但是这个方法没有其他重载。实际上,我是从网站上提供的ASP.NET MVC联系人管理器示例中采用这种方法的。几乎所有
NullReferenceException
的情况都是相同的。有关提示,请参阅“”。
return View(detailToEdit);