【问题标题】:MVC3 @Html.EditorForModel NullReferenceExceptionMVC3 @Html.EditorForModel NullReferenceException
【发布时间】:2011-11-11 00:19:15
【问题描述】:

我看到一个奇怪的异常,并且完全不知道如何解决这个问题。我确定我忽略了一些非常明显的东西。我有以下视图工作,但做了一些事情,现在无法弄清楚为什么它突然停止了。

// All in an Area

// Controller
public ViewResult Test()
{
    return View();
}

[HttpPost]
public ViewResult Test(TestModel testModel)
{
    // Do some work
    // Redirect or
    return View(testModel);
}

// Model
public class TestModel
{
    [Required]
    public string Name { get; set; }
}

// View
@model MyApp.Areas.Admin.Models.TestModel

@{
    ViewBag.Title = "Create New User";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

@section HeadSection {
    <link href="@Url.Content("~/Content/MvcMembership.css")" rel="stylesheet" type="text/css" />
}

<h2 class="someclass">Test Form</h2>

<div class="otherclass">
    @using (Html.BeginForm("Test", "MyController"))
    { 
    @Html.EditorForModel()
        <input type="submit" value="Create" />
        @Html.ValidationSummary(true)
} 
</div>

我在实际代码或测试控制器/视图中的 HttpGet 上的 @Html.EditorForModel() 处收到以下异常。

System.NullReferenceException was unhandled by user code
  Message=Object reference not set to an instance of an object.
  Source=App_Web_field.master.5f132152.av8tutrk
  StackTrace:
       at ASP.views_inputbuilders_editortemplates_field_master.__Render__control1(HtmlTextWriter __w, Control parameterContainer) in http://server/Views/InputBuilders/EditorTemplates/Field.Master:line 5
       at System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children)
       at System.Web.UI.Control.RenderChildren(HtmlTextWriter writer)
       at System.Web.UI.Control.Render(HtmlTextWriter writer)
       at System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter)
       at System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter)
       at System.Web.UI.Control.RenderControl(HtmlTextWriter writer)
       at System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children)
       at System.Web.UI.Control.RenderChildren(HtmlTextWriter writer)
       at System.Web.Mvc.ViewPage.Render(HtmlTextWriter writer)
       at System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter)
       at System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter)
       at System.Web.UI.Control.RenderControl(HtmlTextWriter writer)
       at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
  InnerException: 

任何想法都会很棒!!! -- 杰夫

[编辑]几个项目符号:

  • 我有一个带有测试代码的工作解决方案/项目。主要区别在于项目规模。这是一个有很多区域、控制器、模型和视图的大项目。所以路由,引用等......是不同的。我什至已经通过并确认 Model 为空,并且通过很少的阅读我可以发现它似乎 EditorFor[Model] 使用反射来创建字段,所以它是别的东西。
  • 我在搜索解决方案时在网上找到了一个工作示例:http://mvcmembership.codeplex.com/

【问题讨论】:

  • a: 你是否传入了一个非空的TestModel 作为模型? b: 它用的是什么编辑器?默认的?定制的?什么?
  • 非空和空。 TestModel 是模型。我正在使用VS2010。请参阅上面的问题编辑。

标签: c# asp.net asp.net-mvc-3 razor


【解决方案1】:

原来我已经使用 MvcContrib.Mvc3-ci (v3.0.90.0) Nuget 包删除了一个可移植区域,但没有删除 Application_Start() 中 Global.asax.cs 文件中的用法。简而言之,我完全删除了 MvcContrib,它工作正常。如果我添加包和 Global.asax.cs 用法并且问题返回。当我有时间我会做更多的事情来理解这个问题,写一个包含细节的博客并在必要时提交问题。

安装 MvcContrib.Mvc3-ci (v3.0.90.0) 后,Global.asac.cs 文件包含:

using MvcContrib.PortableAreas; // REMOVED THIS!

protected void Application_Start()
{
    AreaRegistration.RegisterAllAreas();
    RegisterGlobalFilters(GlobalFilters.Filters);

    PortableAreaRegistration.RegisterEmbeddedViewEngine(); // REMOVED THIS!
    RegisterRoutes(RouteTable.Routes);
}

感谢 Maess、Darin 和 Michal 的帮助。无法将任何答案标记为正确,但至少我可以表示感谢。

【讨论】:

    【解决方案2】:

    您使用 EditorForModel 并将空引用传递给它。通过发送例如修复它从控制器到视图的新 TestModel 对象。

    【讨论】:

    • 谢谢 Michal,我确实找到了我在问题底部强调的解决方案。我确信这与项目有关,所以可能不是一个公平的问题。最佳——杰夫
    【解决方案3】:
    public ViewResult Test()
    {
        return View(new TestModel());
    }
    

    【讨论】:

    • 这并不能解决问题。我什至已经通过它,我不知道什么是空的。我有一个使用完全相同代码的新解决方案和新项目。我还在寻找解决方案时发现了其他类似的有效代码。查看问题编辑。
    • 谢谢达林,我确实找到了我在问题底部强调的解决方案。我确信这与项目有关,所以可能不是一个公平的问题。最佳——杰夫
    【解决方案4】:

    只是一个想法,但是,如果您要发送一个新的 TestModel,我敢打赌 Name 属性为 null,请尝试使用始终设置为至少 string.Empty 的成员来保存 Name 属性,看看是否可以解决你的问题。

    【讨论】:

    • 谢谢 Maess,我确实找到了我在问题底部强调的解决方案。我确信这与项目有关,所以可能不是一个公平的问题。最佳——杰夫
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-19
    • 2016-08-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多