当前位置: 首页 > 编程语言 > C#

ASPNETMVC-为什么ModelState.IsValid在字段确实有值时“需要字段x”?

时间:2023-04-10 17:11:41 C#

ASPNETMVC-为什么ModelState.IsValid“需要字段x”,而该字段确实有值?我有一个这样的模型:publicPurchaseOrder{[Required][StringLength(15)]publicvirtualstringOrderNumber{get;set;}//etc.}当我从视图提交订单时(使用$.post,不输入type=submit),它转到我的控制器类:publicclassPurchaseOrderController{publicJsonResultSave(PurchaseOrderorder){//TryUpdateModel(order);//注释掉,因为modelstate.isvalid仍然是falseif(ModelState.IsValid){//它从不有效}}}ModelState.IsValid总是返回false并出现错误:“需要订单号字段。”但是当它说“需要值”时,这个字段有一个值(??为什么?)?我错过了什么吗?是因为$.post而不是submit吗?我能做些什么?这是调试器的样子:alttexthttp://sofzh.miximages.com/c%23/www.freeimagehosting.net编辑:额外信息....我真的认为由于某种原因模型绑定没有发生.当我尝试在此处找到的代码时:)if(!ModelState.IsValid){ModelState.Clear();ModelMetadatamodelMetadata=ModelMetadataProviders.Current.GetMetadataForType(()=>order,order.GetType());模型验证器compositeValidator=模型验证器。GetModelValidator(模型元数据,base.ControllerContext);foreach(ModelValidationResultresultincompositeValidator.Validate(null)){this.ModelState.AddModelError(result.MemberName,result.Message);然后ModelState.IsValid=true。compositeValidator.Validate()返回0个错误。我认为这表明模型不受约束,但我仍然不知道为什么。控制器方法实际上是这样的(我最初写这个问题时错过了过滤器)..}并且JsonFilter这样做是为了从json提交的数据中提取POCO:filterContext.ActionParameters[Param]=jsSerializer.Deserialize(inputContent,JsonDataType);我在此行上放置了一个断点,订单有效,加上订单.OrderNumber具有正确的值。所以仍然没有解决,但希望这个额外的信息将有助于找到解决方案你确定错误来自OrderNumber字段吗?奇怪的是,错误信息的序号是2个字。尝试更改字段的名称或删除所需的标签以确保这是错误的来源。您的jQuerypost可能没有以正确的方式回传到控制器。您可能只发布订单号而不是准确代表模型的对象。我必须查看您的javascript才能绝对确定。发布到该方法的正确方法是(假设您的订单号存储在名为“orderNumber”的javascript变量中:$.post([urltomethod],{order:{OrderNumber:orderNumber}},function(json){//InsertcodeforactionstotakeafterAJAXpostreturns.},'json');如果是这种情况,下一步我要仔细检查javascript是否确实捕获了您的订单号的值并将它作为请求的一部分发布。通过Firebug快速检查应该能够告诉您是否发生这种情况。我已经“解决”了它,但我真的不明白为什么我所做的更改有帮助。我必须这样做三件事:删除jsonfilter(过滤器未绑定)将contentType更改为application/json$.ajaxSetup({contentType:"application/json;charset=utf-8"});使用MVCfutures下载Microsoft.Mvc.dll作为下面的描述:http://haacked.com/archive/2010/04/15/sending-json-to-an-asp-net-mvc-action-method-argument.aspx.inGlobal.asax.cs将此添加到其中Application_Start()说:ValueProviderFactories.Factories.Add(newJsonValueProviderFactory());现在我不知道为什么会这样,但确实如此。不幸的是,它有一个负面影响:contenttype应用于所有$.get()和$.post()方法,并破坏了我所有的jqgrids-它们似乎只有在contenttype是application/xWorks的默认值时才有效-www表单-urlencoded所以我问了2个问题:是否可以在$.post()调用中设置内容类型?然后我不需要全局设置Jquery-如何让$.post()使用contentType=application/json?如果内容类型是application/json,是否可以使jqrid工作?Jquery-如何使$.post()使用contentType=application/json?以上是C#学习教程:ASPNETMVC——为什么ModelState.IsValid在字段确实有值的情况下“需要x字段”?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: