2011-11-07 21 views
1

我看到和奇怪的例外,完全出於如何解決這個問題的想法。我確定我忽略了一些非常明顯的東西。我有以下看法工作,但做了一些事情,現在不知道爲什麼突然停止。MVC3 @ Html.EditorForModel NullReferenceException

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

任何想法都會很棒! - 傑夫

[編輯]幾顆子彈:

  • 我有測試代碼工作解決方案/項目。主要區別是項目規模。這是一個有很多領域,控制器,模型和視圖的大項目。所以路由,引用等等是不同的。我甚至跨過並確認模型爲空,並且我可以找到它的一點點閱讀它EditorFor [Model]使用反射來創建字段,所以它是別的東西。
  • 我找到了一個工作示例在線,同時尋找解決方案:http://mvcmembership.codeplex.com/
+0

a:你傳遞了一個非null TestModel作爲模型嗎? b:它使用了什麼編輯器?一個默認的?一個自定義的?什麼? –

+0

非null和null都是。 TestModel是模型。我正在使用VS2010。看到我上面的問題編輯。 –

回答

2

原來,我使用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,達林和米哈爾對你有所幫助。不能標記任何答案是正確的,但至少我可以延伸這種感謝。

0

您使用EditorForModel和你傳遞一個空引用。通過發送例如一個新的TestModel對象來自控制器的視圖。

+0

查看我對Darin的評論。 –

+0

感謝Michal,我確實找到了我在問題底部突出顯示的解決方案。我確信它與這個項目有關,所以可能不是一個公平的問題。 Best - Jeff –

0
public ViewResult Test() 
{ 
    return View(new TestModel()); 
} 
+0

這並不能解決問題。我甚至穿過它,我不知道什麼是空的。我有一個新的解決方案和新的項目,使用完全相同的代碼。我還發現在尋找其他類似代碼的解決方案。查看問題編輯。 –

+0

感謝Darin,我確實找到了我在問題底部突出顯示的解決方案。我確信它與這個項目有關,所以可能不是一個公平的問題。最好 - 傑夫 –

0

只是一個想法,但是,如果你是在一個新的TestModel發送,我敢打賭,名稱屬性爲null,嘗試使用它總是設定爲至少一個的String.Empty部件保持Name屬性和看看是否能解決你的問題。

+0

謝謝Maess,我確實找到了問題底部突出顯示的解決方案。我確信它與這個項目有關,所以可能不是一個公平的問題。最好 - 傑夫 –