C# ASP.NET MVC 5使用ModelState而不是ModelState中的值

C# ASP.NET MVC 5使用ModelState而不是ModelState中的值,c#,asp.net,asp.net-mvc,razor,asp.net-mvc-5,C#,Asp.net,Asp.net Mvc,Razor,Asp.net Mvc 5,很简单 公共JsonResult A1(Guid?id) { var model=newmymodel{Id=g2,Id2=g2,Name=“A1”}; 返回新的JsonResult { 数据=新 { html=this.RenderPartialView(“A1”,模型), }, JsonRequestBehavior=JsonRequestBehavior.AllowGet }; } 公共JsonResult A2(Guid?id) { ModelState.Clear(); var mod

很简单

公共JsonResult A1(Guid?id) { var model=newmymodel{Id=g2,Id2=g2,Name=“A1”}; 返回新的JsonResult { 数据=新 { html=this.RenderPartialView(“A1”,模型), }, JsonRequestBehavior=JsonRequestBehavior.AllowGet }; } 公共JsonResult A2(Guid?id) { ModelState.Clear(); var model=newmymodel{Id=g2,Id2=g2,Name=“A2”}; 返回新的JsonResult { 数据=新 { html=this.RenderPartialView(“A1”,模型), }, JsonRequestBehavior=JsonRequestBehavior.AllowGet }; } 非常简单,有两个按钮和脚本

函数F1(a){
$.ajax({
键入:“GET”,
url:“@url.Content(“~/Home/A”)”+A,
数据:{
id:'@ModelBug.Controllers.HomeController.g1'
},
数据类型:“json”,
发送前:函数(xhr){
},
成功:功能(数据){
$(“#col”+a).append(“”+data.html+“”);
},
错误:函数(){
}
});
}
非常简单的渲染

Model.Id=@Model.Id
TextBoxFor(model=>model.Id)=@Html.TextBoxFor(model=>model.Id)
TextBoxFor(model=>model.Id)=@Html.TextBoxFor(model=>model.Id)
Model.Id2=@Model.Id2
TextBoxFor(model=>model.Id2)=@Html.TextBoxFor(model=>model.Id2)
TextBoxFor(model=>model.Id2)=@Html.TextBoxFor(model=>model.Id2)
Model.Name=@Model.Name
TextBoxFor(model=>model.Name)=@Html.TextBoxFor(model=>model.Name)
TextBoxFor(model=>model.Name)=@Html.TextBoxFor(model=>model.Name)
在TextBoxFor(model=>model.Id)的结果视图中,不带ModelState.Clear()

显示4a01aadd-c61a-4524-95f6-e88a665c0745(来自参数(Guid?id))

必须是d2afb9a8-fb43-4237-9f34-abc7e5b59a41**(来自公共静态Guid g2)

主要问题

为什么TextBoxFor()中的值来自paramid而不是来自model.id


另外,在大型项目中,模型是从数据库获取的,但视图中的model.Id与数据库不同,model.Id=查询参数。

不清楚您的要求。您所说的
必须是x.Id=d2afb9a8-fb43-4237-9f34-abc7e5b59a41是什么意思?参数
id
g2
的值是多少。(为什么返回json而不是部分视图?)@部分中的Model.Id有效!!!但是在TextBoxFor(model=>model.Id)中无效。前面问题中的重复项解释了这一点。您的项目名称表明您认为这是一个bug-它不是-它是设计的(有关原因的解释,请参阅的最后一部分),您的参数有一个名称
id
。调用方法时,其值将添加到
ModelState
。您的模型还有一个名为
id
的属性,您可以将该属性设置为不同的值。但是html助手使用
ModelState
中的值(如果存在)。您可以通过更改一个或另一个的名称来轻松解决此问题,使它们不匹配(或者按照第二个示例使用
ModelState.Clear()
)是否重定向无关紧要——这是答案的最后一部分,它解释了为什么html助手使用
ModelState
中的值而不是model属性的值。这是故意的!如果不希望出现这种行为,请更改方法参数的名称或模型属性的名称,或者使用
ModelState.Clear()
不清楚您的要求。您所说的
必须是x.Id=d2afb9a8-fb43-4237-9f34-abc7e5b59a41是什么意思?参数
id
g2
的值是多少。(为什么返回json而不是部分视图?)@部分中的Model.Id有效!!!但是在TextBoxFor(model=>model.Id)中无效。前面问题中的重复项解释了这一点。您的项目名称表明您认为这是一个bug-它不是-它是设计的(有关原因的解释,请参阅的最后一部分),您的参数有一个名称
id
。调用方法时,其值将添加到
ModelState
。您的模型还有一个名为
id
的属性,您可以将该属性设置为不同的值。但是html助手使用
ModelState
中的值(如果存在)。您可以通过更改一个或另一个的名称来轻松解决此问题,使它们不匹配(或者按照第二个示例使用
ModelState.Clear()
)是否重定向无关紧要——这是答案的最后一部分,它解释了为什么html助手使用
ModelState
中的值而不是model属性的值。这是故意的!如果不希望出现这种行为,请更改方法参数的名称或模型属性的名称,或使用
ModelState.Clear()