0

当我以以下语法发布带有 jQ​​uery 的 HTML.Form 时:

$.post('<%: Url.Action("ActionName","ControllerName") %>',
             $("#FormName").serialize());

该对象已正确发布到服务器,但如果我使用:

var reason = encodeURIComponent($("#FormName").serialize());
$.post('<%: Url.Action("ActionName","ControllerName") %>',
                        { reason: reason });

序列化对象为空,当我使用或不使用 encodeURIComponent 时,我得到相同的结果。我需要向服务器发送更多参数数据,这就是为什么我想使用第二种方法,但我无法正确发送序列化对象。

4

1 回答 1

1

它通过在发布数据时用 [] 将序列化字符串装箱来工作:

var reason = $("#FormName").serialize();
$.post('<%: Url.Action("ActionName","ControllerName") %>',
                    { reason: [reason] });

当检查 HTTP Fiddler 时,帖子正文的不同之处在于:

var reason = $("#FormName").serialize();
$.post('<%: Url.Action("ActionName","ControllerName") %>',
                    { reason: reason });

正文标签包含这样的内容:reason=Type=1&Comments=&ID=15 因此它无法区分变量实际包含的内容。通过用 [] 将其装箱,body 标签现在包含:reason%5B%5D=Type%3D1%26Comments%3D%26ID%3D1 从而正确编码发布的数据。

于 2013-05-13T08:37:15.397 回答