0

我有一个 ViewModel

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

另外,我有一种操作方法:

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

    return View(model);
}

我的观点是这样的:

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

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

在 "Html.Serialize("model", Model, SerializationMode.EncryptedAndSigned);" 行 调试器停止并返回异常“对象引用未设置为对象的实例”(NullReferenceException)。虽然,模型不是 null 并且包含初始值。

我使用 ASP.Net MVC 3(Razor),堆栈跟踪如下:

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)

我的代码有什么问题?

4

2 回答 2

0

问题是我有对 Mvc2Futures(“Microsoft.Web.Mvc.dll”)的程序集引用。但是当我更改对 Mvc3Futures ("Microsoft.Web.Mvc.dll") 的引用时,一切正常。非常感谢。

于 2012-08-30T07:18:11.363 回答
0

你需要使用

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

如果您想要在表单上带有模型的隐藏字段。

于 2012-08-30T06:42:05.743 回答