2012-08-29 3 views
0

J'ai un ViewModel commeHtml.Serialize retour NullReferenceException

namespace ViewModel 
{ 
    [Serializable] 
    public class TestViewModel 
    { 
     public int Id { get; set; } 
     public string Name { get; set; } 
     public string Description { get; set; } 
    } 
} 

Aussi, j'ai une méthode d'action:

public ActionResult Index() 
{ 
    TestViewModel model = new TestViewModel 
    { 
     Id = -1, 
     Name = "Some name", 
     Description = "Some description" 
    }; 

    return View(model); 
} 

Et mon avis quelque chose comme ceci:

@using Microsoft.Web.Mvc 
@model ViewModel.TestViewModel 

@using (Html.BeginForm()) 
{ 
    Html.Serialize("model", Model, SerializationMode.EncryptedAndSigned); 
    //....Editor fields 
} 

En ligne "Html.Serialize (" model ", Model, SerializationMode.EncryptedAndSigned);" le débogueur est arrêté et renvoie l'exception "référence d'objet non définie sur une instance d'un objet" (NullReferenceException). Bien que, le modèle n'est pas null et contient des valeurs initiales.

J'utilise ASP.Net MVC 3 (Razor) et trace de la pile est inférieure à:

in Microsoft.Web.Mvc.SerializationExtensions.SerializeInternal(HtmlHelper htmlHelper, 
String name, Object data, SerializationMode mode, Boolean useViewData, MvcSerializer 
serializer) 
in Microsoft.Web.Mvc.SerializationExtensions.SerializeInternal(HtmlHelper htmlHelper, 
String name, Object data, SerializationMode mode, Boolean useViewData) 
in Microsoft.Web.Mvc.SerializationExtensions.Serialize(HtmlHelper htmlHelper, String 
name, Object data, SerializationMode mode) 
in ASP._Page_Views_Wizard_Index_cshtml.Execute() 
in c:\Projects\TestProject\Views\Wizard\Index.cshtml:line 15 
in System.Web.WebPages.WebPageBase.ExecutePageHierarchy() 
in System.Web.Mvc.WebViewPage.ExecutePageHierarchy() 
in System.Web.WebPages.StartPage.RunPage() 
in System.Web.WebPages.StartPage.ExecutePageHierarchy() 
in System.Web.WebPages.WebPageBase.ExecutePageHierarchy(WebPageContext pageContext, 
TextWriter writer, WebPageRenderingBase startPage) 
in System.Web.Mvc.RazorView.RenderView(ViewContext viewContext, TextWriter writer, 
Object instance) 
in System.Web.Mvc.BuildManagerCompiledView.Render(ViewContext viewContext, TextWriter 
writer) 
in System.Web.Mvc.ViewResultBase.ExecuteResult(ControllerContext context) 
in System.Web.Mvc.ControllerActionInvoker.InvokeActionResult(ControllerContext 
controllerContext, ActionResult actionResult) 
in System.Web.Mvc.ControllerActionInvoker. 
<>c__DisplayClass1c.InvokeActionResultWithFilters>b__19() 
in System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter filter, 
ResultExecutingContext preContext, Func`1 continuation) 

Quel est le problème dans mon code?

+0

Vous devrez fournir plus de détails sur l'erreur que vous voyez, comme une trace de pile, la version de MVC que vous utilisez, etc. – Levi

Répondre

0

Vous devez utiliser

@Html.Serialize("model", Model, SerializationMode.EncryptedAndSigned) 

si vous voulez champ caché avec le modèle sur le formulaire.

+0

Kirill, j'ai utilisé ce format, mais la même erreur .. –

+0

Etes-vous sûr que le problème dans cette partie du code? J'utilise exactement votre code avec la mise à jour qui est dans ma réponse et cela fonctionne. Peut-être avez-vous des ActionFilters? Pourriez-vous montrer votre global.asax.cs? Avez-vous des attributs sur la classe de contrôleur ou la méthode d'action? –

0

Le problème était que j'avais une référence d'assembly à Mvc2Futures ("Microsoft.Web.Mvc.dll"). Mais quand j'ai changé la référence à Mvc3Futures ("Microsoft.Web.Mvc.dll") tout fonctionne bien. Merci beaucoup.