2

我有一个表单,我目前用一些 Javascript 功能枚举,然后用 jQuery .ajax() 将它发布到 MVC 控制器操作。如果我想为发布此表单添加传统(无 JavaScript)支持,我对我的选择几乎没有疑问。

1)问题是我有一些不在字段中的数据,但它只是 div 中的文本。由于我目前正在使用 AJAX 发布,因此我可以在发布之前通过它们的 id 获取这些 div 的内容并将它们包含在帖子中。我假设传统的 POST 会缺少这些信息。

一个想法是<input>也为这些 div 制作一个,但将其隐藏在页面上。然后在 POST 中使用它们。

2)如果我决定只使用 AJAX 帖子,我可以完全摆脱表单吗?

3) 鉴于我一直使用 AJAX 帖子,您建议使用什么格式发布值?JSON,逗号分隔(复杂数据有问题),还有别的吗?

4)你通常支持这两种方式吗?因为如果我现在查看我的表单,它们会使用大量的 jQuery 和 jQuery UI 功能,如果没有 JavaScript 来实现这些功能,那就有点过头了。用户没有启用 JS 的可能性有多大,可以只说“需要 JS”吗?

对于这个具体案例,我正在构建一个内部的按需应用程序,它不会面向 Web(至少目前还没有),所以我可以选择说 JS 是必需的。

4

2 回答 2

2

如果您想在没有 javascript 的情况下维护一个可行的网站,那么我建议您首先让一个网站在没有它的情况下运行,然后使用 javascript 将该界面修改为您真正想要的启用 javascript 的界面。这将需要从input元素中包含的所有输入开始,然后使用 javascript 将这些元素替换为您的div元素 - 或者更实际地,删除inputs并显示预先存在的div元素。

我认为即使在使用 AJAX 时也没有必要摆脱该表单,尽管从技术上讲没有理由拥有它。然而,我喜欢做的一件事是保留表单,然后让我的提交方法从form标签中提取操作,这样我就不需要直接在 javascript 中对其进行编码。您可能会发现这使得在各种表单之间共享 javascript 变得更加容易。

我总是序列化以请求参数,就像通常的表单一样。最简单的方法是使用 jQueryserialize方法,但这仅适用于输入。您还可以构造一个散列(对象中的键值对)并将其作为 AJAX 的数据参数提供。它将自动序列化以请求参数。使用其他任何东西都需要您使用自己的代码而不是 MVC 中的模型绑定代码进行反序列化。

对于面向公众的网络应用程序,我尝试让界面同时适用于启用和禁用 javascript 的浏览器。不过,非 JavaScript 浏览器有时无法访问某些功能。对于内部应用程序,我很乐意要求 javascript,因为您(或您公司中的某个人)对它有更多的控制权。

于 2010-02-26T12:43:51.167 回答
1

我会将div文本放入隐藏字段 - 否则它不会被传统的 POST 拾取。

我个人不会摆脱这种形式,因为如果您的 JS 由于某种原因被禁用/损坏会发生什么?即使用户启用了 JS,如果(例如)一个 JS 文件没有加载您的表单,您的表单也将无法通过 AJAX 发送数据。拥有 AJAX,但请确保您可以回退到传统形式的 POST。

于 2010-02-26T12:41:10.253 回答