Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.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# 无法更改ASP.NET MVC 3中文本框的值_C#_.net_Asp.net Mvc_Asp.net Mvc 3_View - Fatal编程技术网

C# 无法更改ASP.NET MVC 3中文本框的值

C# 无法更改ASP.NET MVC 3中文本框的值,c#,.net,asp.net-mvc,asp.net-mvc-3,view,C#,.net,Asp.net Mvc,Asp.net Mvc 3,View,我在更改MVC3中文本框的值时遇到问题 我有一个由控制器返回的简单视图,它被键入到自定义视图模型中。视图上有一个文本框,它绑定到视图模型上的字符串属性。如果在初始加载时填充此字符串,则文本框值包含该字符串的值。但是,如果我随后将表单发回同一URL并更改视图模型字符串值并重新加载视图,则文本框包含发回的值,而不是控制器为视图模型提供的值 我创建了一个简单的测试项目,以尽可能最简单的方式重新创建问题 视图模型: 控制器: 视图: 在视图中,我显示视图模型字符串值,并将字符串属性绑定到文本框 初

我在更改MVC3中文本框的值时遇到问题

我有一个由控制器返回的简单视图,它被键入到自定义视图模型中。视图上有一个文本框,它绑定到视图模型上的字符串属性。如果在初始加载时填充此字符串,则文本框值包含该字符串的值。但是,如果我随后将表单发回同一URL并更改视图模型字符串值并重新加载视图,则文本框包含发回的值,而不是控制器为视图模型提供的值

我创建了一个简单的测试项目,以尽可能最简单的方式重新创建问题

视图模型:

控制器:

视图:

在视图中,我显示视图模型字符串值,并将字符串属性绑定到文本框

初始加载时,一切正常:

但是,如果我更改文本框的值,然后按enter键发布表单,事情就不会像我预期的那样发生。显示的值是控制器在操作方法中设置的值,但文本框保留了回发的值:

我不确定问题出在哪里。

不幸的是,这是正确的行为。使用
TextBoxFor
或其他数据绑定元素时,创建的元素首先绑定到现有的
ModelState
,然后再绑定到模型

解决方案是在[HttpPost]操作中清除ModelState,这样POST操作返回的视图中的元素将绑定到模型。在POST操作中,添加以下内容:

ModelState.Clear();
就我个人而言,我认为设计是不正确的,但是清除ModelState将为您提供您所期望的行为。

这是(不幸的)正确的行为。使用
TextBoxFor
或其他数据绑定元素时,创建的元素首先绑定到现有的
ModelState
,然后再绑定到模型

解决方案是在[HttpPost]操作中清除ModelState,这样POST操作返回的视图中的元素将绑定到模型。在POST操作中,添加以下内容:

ModelState.Clear();

就我个人而言,我认为设计是不正确的,但是清除ModelState将提供您所期望的行为。

这是MVC应用程序的期望行为

发布时,它将值存储在
ModelState
中,Html帮助程序使用该值而不是
Model


如果需要,您可以编写自己的html助手或使用标准html
来解决此问题

这是MVC应用程序的预期行为

发布时,它将值存储在
ModelState
中,Html帮助程序使用该值而不是
Model


如果需要,您可以编写自己的html助手或使用标准html
来解决此问题

谢谢你。我不敢相信我没有考虑ModelState,因为当它显示值时,验证就是这样工作的。谢谢你,奥本顾问,不客气。这可能会让人迷惑,因为首先绑定到ModelState似乎是倒退的。由于所传递的模型是开发人员最近的意图,因此您希望它是第一个。这就是生活,你知道为什么吗?我在过去经历过这种情况,正如你所说,这是一种误解。我只能假设他们这样做有很好的理由,一点线索也没有。我不知道这是一个有意识的设计决定还是一个疏忽。谢谢你。我不敢相信我没有考虑ModelState,因为当它显示值时,验证就是这样工作的。谢谢你,奥本顾问,不客气。这可能会让人迷惑,因为首先绑定到ModelState似乎是倒退的。由于所传递的模型是开发人员最近的意图,因此您希望它是第一个。这就是生活,你知道为什么吗?我在过去经历过这种情况,正如你所说,这是一种误解。我只能假设他们这样做有很好的理由,一点线索也没有。我不知道这是一个有意识的设计决定还是一个疏忽。(codetunnel.com上的所有链接现在都没有了,可以用一个合适的CDN(例如imgur.com上的)替换它们吗?(codetunnel.com上的所有链接现在都没有了,可以用一个合适的CDN(例如imgur.com上的)替换它们吗?)