MVC3 @ Html.EditorForModel NullReferenceException - PullRequest
1 голос
/ 07 ноября 2011

Я вижу и странное исключение, и совершенно нет идей о том, как решить эту проблему.Я уверен, что пропускаю что-то очень очевидное.У меня было следующее представление, но я что-то сделал, и теперь не могу понять, почему он внезапно остановился.

// 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>

Я получаю следующее исключение при @ Html.EditorForModel () в HttpGet в моем реальном коде или в тестах.контроллеры / виды.

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 is null, и с небольшим чтением я могу найти, что EditorFor [Model] использует отражения для создания полей, так что это нечто другое.
  • При поиске решения я нашел в сети рабочий пример: http://mvcmembership.codeplex.com/

Ответы [ 4 ]

2 голосов
/ 10 ноября 2011

Оказалось, что я удалил переносимую область с помощью пакета Nuget MvcContrib.Mvc3-ci (v3.0.90.0), однако не удалил использования в файле Global.asax.cs в Application_Start (). Короче я вообще убрал 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);
}

Спасибо Месс, Дарину и Михалу за вашу помощь. Не могу пометить правильные ответы, но, по крайней мере, могу выразить благодарность.

0 голосов
/ 07 ноября 2011
public ViewResult Test()
{
    return View(new TestModel());
}
0 голосов
/ 07 ноября 2011

Просто мысль, но, если вы отправляете в новой TestModel, могу поспорить, что свойство Name равно null, попробуйте использовать элемент, для которого всегда задано как минимум string.Empty, чтобы содержать свойство Name и посмотреть, разрешается ли это. ваша проблема.

0 голосов
/ 07 ноября 2011

Вы используете EditorForModel и передаете пустую ссылку на него. Исправьте это, отправив, например, новый объект TestModel для представления из контроллера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...