Asp.net mvc 如何阻止ASP.NET MVC ajax表单POST响应重置其表单字段?

Asp.net mvc 如何阻止ASP.NET MVC ajax表单POST响应重置其表单字段?,asp.net-mvc,ajax,forms,asp.net-ajax,Asp.net Mvc,Ajax,Forms,Asp.net Ajax,我使用AJAX表单post将一些表单字段发送到服务器,在服务器上,数据将在数据库中更新,并在过程中被篡改,因此服务器端的数据可能会发生一些变化。此控制器操作的响应是一个部分,它更新表单字段的HTML,以便这些字段的值包括新的经过处理的值 问题是,显然某些MVC.js必须在返回的部分的HTML上执行,以将文本字段的值更改回其最初发布的值,从而使经过处理的值永远不会显示 我可以看出这在某些场景中是多么有用,但它正在挫败我的场景。如何抑制这种行为 编辑 我发现如果在我的部分中,我替换了这个: <

我使用AJAX表单post将一些表单字段发送到服务器,在服务器上,数据将在数据库中更新,并在过程中被篡改,因此服务器端的数据可能会发生一些变化。此控制器操作的响应是一个部分,它更新表单字段的HTML,以便这些字段的值包括新的经过处理的值

问题是,显然某些MVC.js必须在返回的部分的HTML上执行,以将文本字段的值更改回其最初发布的值,从而使经过处理的值永远不会显示

我可以看出这在某些场景中是多么有用,但它正在挫败我的场景。如何抑制这种行为

编辑 我发现如果在我的部分中,我替换了这个:

<%= Html.TextBox("FirstName", Model.FirstName) %>

为此:

<input name="FirstName" value="<%= Html.Encode(Model.FirstName) %>" />


表单字段中的值会像我期望的那样更新。因此,
Html.TextBox
似乎有一些神奇的副作用,我还不明白。

我认为没有任何随机的javascript被执行。MVC不依赖javascript,当然也不会将它注入到您的页面中


更可能的问题是ModelStateDictionary保存的是原始值。仅存在于表单post中但未应用于模型的值将不会显示

嗯,我在网页中加入了
MicrosoftAjax.js
MicrosoftMvcAjax.js
,这样ajax的东西就可以工作了,所以不像注入了神奇的随机javascript。因为这个.js是我用来执行ajax表单POST的代码,所以它有机会做我怀疑它在做的事情。也就是说,我将按照您的建议查看
ModelStateDictionary
,看看我发现了什么。我很可能不理解这里的所有交互。但是,我使用强类型模型对象渲染局部视图,在web浏览器中仍然只能看到旧值。我已将模型初始化为完全为空,或具有新值,无论哪种方式,旧值(用户最初发布的值)都会显示在刷新的部分中,尽管部分的HTML本身具有正确的(新)表单字段值。顺便说一句,如果我设计局部视图,使其更改其中一个表单字段的名称(从FirstName更改为FirstName1),则新值将显示在其中,而不是旧值。这确实表明浏览器javascript正在更改已识别表单字段的值。正如“womp”所说,ModelStateDictionary用于保留用户在浏览器中键入的值。这是一种场景,例如用户在“年龄”字段中键入“狗”。您不希望清除该值—您希望保留“dog”,并且只向用户显示一个错误。您可以做的是清除模型状态字典(或者至少清除您关心的字段),这绝对不是JavaScript更改任何值。ASP.NET MVC使用的JavaScript代码没有这样的功能。然而,Mozilla Firefox中存在一个bug,某些输入标记即使在通过DOM更新后也会重置为其原始值。要确认这就是您看到的,请尝试在Internet Explorer中运行该应用程序。