Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Mvc期货序列化问题:序列化异常:反序列化失败_C#_Asp.net Mvc_Asp.net Mvc 4_Serialization_Asp.net Mvc Futures - Fatal编程技术网

C# Mvc期货序列化问题:序列化异常:反序列化失败

C# Mvc期货序列化问题:序列化异常:反序列化失败,c#,asp.net-mvc,asp.net-mvc-4,serialization,asp.net-mvc-futures,C#,Asp.net Mvc,Asp.net Mvc 4,Serialization,Asp.net Mvc Futures,我有一个asp.net 4.5应用程序,它是一个向导UI,可以在最后生成报告。我正在使用MVC Futures插件在表单之间序列化和传递模型。我可以一直点击并生成报告。我还点击了F5并刷新了它,它将重新发布来自上一个请求的表单数据并重新加载表单 我的问题是,有时,通常在等待几分钟后,如果我尝试再次点击页面上的F5,而不是重新生成报告,我会得到以下错误: 序列化异常:反序列化失败 看起来浏览器可能忘记了以前的请求,试图刷新页面而不重新提交表单。你知道发生了什么事吗?我将通过立即重新提交表单,然后等

我有一个asp.net 4.5应用程序,它是一个向导UI,可以在最后生成报告。我正在使用MVC Futures插件在表单之间序列化和传递模型。我可以一直点击并生成报告。我还点击了F5并刷新了它,它将重新发布来自上一个请求的表单数据并重新加载表单

我的问题是,有时,通常在等待几分钟后,如果我尝试再次点击页面上的F5,而不是重新生成报告,我会得到以下错误:

序列化异常:反序列化失败

看起来浏览器可能忘记了以前的请求,试图刷新页面而不重新提交表单。你知道发生了什么事吗?我将通过立即重新提交表单,然后等待几分钟并再次执行,并使用Fiddler查看每次发布的内容,尝试重现此问题

有没有人对这里的问题有什么想法

更新(1/3/2014):

以下是生成报告的post方法:

[HttpPost]
public ActionResult GenerateReport([Deserialize] WizardModel wizardModel, string providerId = null, string providerName = null)
{
    var model = new ReportModel();
    if (!String.IsNullOrEmpty(providerId))
    {
        wizardModel.Providers = new List<NameValue>(){ new NameValue() { Name = providerName, Value = providerId }};
        model.AutoPrint = true;
    }

    var param = new MeasureParams()
    {
        Key = wizardModel.CriteriaKeys.ToArray(),
        ProviderIds = (wizardModel.Providers != null ? wizardModel.Providers.Select(x => x.Value).ToArray() : null),
        StartDate = (wizardModel.StartDate),
        StartDateAsString = (wizardModel.StartDate).ToString(),
        EndDate = (wizardModel.EndDate),
        EndDateAsString = (wizardModel.EndDate).ToString()
    };

    var results = _measureService.CalculateMeasures(param);

    model.WizardModel = wizardModel;
    model.Results = new List<List<ResultsModel>>();

    model.Results.AddRange(MeasureResultsMapper.MapMeasurementsResultToHierarchicalList(results));
    if (wizardModel.IsDetailedReport)
    {
        return View("DetailedReport", model);
    }
    return View("SummaryReport", model);                
}
完整堆栈跟踪:

“/”应用程序中出现服务器错误


对象引用未设置为对象的实例。 描述:执行当前web请求期间发生未处理的异常。请查看堆栈跟踪以了解有关错误的更多信息以及错误在代码中的起源

异常详细信息:System.NullReferenceException:对象引用未设置为对象的实例

源错误: 在执行当前web请求期间生成了未经处理的异常。有关异常的起源和位置的信息可以使用下面的异常堆栈跟踪来识别

堆栈跟踪:

[NullReferenceException:对象引用未设置为对象的实例。] System.Web.Security.MachineKey.Decode(字符串编码数据,MachineKey保护选项)+268 Microsoft.Web.Mvc.MachineKeyWrapper.Decode(字符串编码数据,MachineKeyProtection保护选项)+41 反序列化(字符串序列化值,序列化模式,IMachineKey machineKey)+175

[SerializationException:反序列化失败。请验证正在使用与序列化数据相同的序列化模式反序列化数据。否则,请查看内部异常。] 反序列化(字符串序列化值,序列化模式,IMachineKey machineKey)+384 反序列化(字符串序列化值,序列化模式)+70 Microsoft.Web.Mvc.DeserializengModelBinder.BindModel(ControllerContext ControllerContext,ModelBindingContext bindingContext)+293 System.Web.Mvc.ControllerActionInvoker.GetParameterValue(ControllerContext ControllerContext,ParameterDescriptor ParameterDescriptor)+317 System.Web.Mvc.ControllerActionInvoker.GetParameterValues(ControllerContext ControllerContext,ActionDescriptor ActionDescriptor)+117 System.Web.Mvc.Async.c_DisplayClass25.b_1e(异步回调、异步回调、对象异步状态)+446 System.Web.Mvc.Async.WrappedAsyncResult
1.Begin(异步回调,对象状态,Int32超时)+130
System.Web.Mvc.Async.AsyncControllerActionInvoker.BeginInvokeAction(ControllerContext ControllerContext,String actionName,AsyncCallback回调,对象状态)+302
System.Web.Mvc.c_uuudisplayClassId.b_uuu17(异步回调,异步回调,对象异步状态)+30
System.Web.Mvc.Async.WrappedAsyncResult
1.Begin(异步回调、对象状态、Int32超时)+130 System.Web.Mvc.Controller.BeginExecuteCore(异步回调,对象状态)+381 System.Web.Mvc.Async.WrappedAsyncResult
1.Begin(异步回调,对象状态,Int32超时)+130
System.Web.Mvc.Controller.BeginExecute(RequestContext RequestContext,AsyncCallback回调,对象状态)+317
System.Web.Mvc.Controller.System.Web.Mvc.Async.IAsyncController.BeginExecute(RequestContext RequestContext,AsyncCallback回调,对象状态)+15
System.Web.Mvc.c_uuudisplayClass8.b_uuu2(异步回调,异步回调,对象异步状态)+71
System.Web.Mvc.Async.WrappedAsyncResult
1.Begin(异步回调、对象状态、Int32超时)+130 System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContextBase httpContext,异步回调,对象状态)+249 System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContext HttpContext,异步回调,对象状态)+49 System.Web.Mvc.MvcHandler.System.Web.IHTTPassynchandler.BeginProcessRequest(HttpContext上下文,AsyncCallback cb,Object extraData)+16 System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()+301
System.Web.HttpApplication.ExecuteStep(IExecutionStep步骤,布尔值&同步完成)+155

您的表单呈现语法错误。将您的表单替换为以下内容:

@using(Html.BeginForm("GenerateReport", "Wizard", FormMethod.Post, new {id = "reviewForm"}))
{
    @Html.Serialize("wizardModel", Model)
}
Html.EndForm()
不同,
Html.BeginForm()
不是一个空函数。你不能这样叫它。如果您想这样呈现表单,应该按照下面的方式进行,但我不建议这样做,因为它不容易阅读:

@Html.BeginForm()
@Html.Serialize("wizardModel", Model)
@{Html.EndForm();}

请提供一些代码。我在评论页面上发布了帖子和表单。如果你还想看其他东西,请告诉我。这是在网络农场上吗?我在本地开发的时候看到的。生产版本托管在Azure上,但我还没有在Azure上看到此错误。这并不是说其他人没有也没有报告它。查看反序列化src,它看起来像是
SerializationException
加载了
InnerException
,那是什么异常?如果他的表单标记错误,我认为它根本不起作用。表单标记错误,应该不起作用。他需要用正确的代码更新他的问题。@ataravati,谢谢
@Html.BeginForm()
@Html.Serialize("wizardModel", Model)
@{Html.EndForm();}