当然,您不必调用 form.load() 。我绕过它,直接通过调用 ScriptManager 提供的链接到我的 web 方法的 AJAX 函数来调用我的 ASMX web 方法。MS AJAX 完成所有 JSON 解码,并排除 'd' 属性等。
您的 Web 方法甚至不必按照 form.load() 的要求返回带有“成功”和“数据”对象的对象,尽管它是一种有用的格式并且我坚持使用它。
通过 web 方法返回的“数据”对象(使用名称/值对,其中名称 == 字段名称),您现在可以调用 ExtJs 的 form.setValues(data); 将值写入字段。
这是绕过 ExtJS 代码的一个完全有效的案例。
--
与加载一样,提交也是如此。要解决必须由提交 Web 方法返回的对象中的“d”属性问题,请处理提交按钮的单击事件,并通过直接调用您的 Web 方法将数据推送到服务器。您的 web 方法可以/应该返回与 ExtJs 所需格式相同的对象。但是你取回了这个对象,如果不成功,你自己调用 form.markInvalid() ,传入'errors'属性。Peasy很容易,效果很好。
同样,由于 ExtJs 不能很好地使用 'd' 属性,因此绕过它并自己做事是完全有效的。
--
我越来越倾向于使用 ScriptManager 提供的函数来调用我的 web 方法,并绕过 ExtJs 的 AJAX 方法调用代码。前者更易于使用,了解“d”属性,还知道如何反序列化 Microsoft 的 JSON 格式以用于序列化的 DateTime 对象。