-1

尝试手动创建 AJAX 请求。在客户端我有这样的事情:

function saveBatterySpecs(id) {
           var url = '@Url.Action("SaveBatterySpecs", "Catalog")';
            $.ajax({
                type: "post",
                url: url,
                data: {
                    art: $("#art" + id).val(),
                    brand: $("#brand" + id).val(),
                    name: $("#name" + id).val(),
                    country: $("#country" + id).val(),
                    volt: $("#volt" + id).val(),
                    cap: $("#cap" + id).val(),
                    sp: $("#sp" + id).val(),
                    powc: $("#powc" + id).val(),
                    term: $("#term" + id).val(),
                    mount: $("#mount" + id).val(),
                    adds: $("#adds" + id).val(),
                    length: $("#length" + id).val(),
                    width: $("#width" + id).val(),
                    height: $("#height" + id).val(),
                    guar: $("#guar" + id).val()
                },
                dataType: 'text', //or json, no difference
                success: hideEditForm(id)
            });

在服务器上一个简单的

 public ActionResult SaveBatterySpecs(string batteryData)
            {
            if (Request.IsAjaxRequest())
                {
                Debug.WriteLine(batteryData);
                return PartialView("~/Views/Shared/EmptyView.cshtml");
                }
            else
                return null;
            }

控制器上的断点有效,一切正常,浏览器调试器显示带有数据的正常请求。但我无法处理 - batteryData 始终为空。我做错了什么?表格无用的解决方案,因为我们避免使用它们并且目前无法使用。我可以将类型从文本切换到 json,但这无济于事。

4

2 回答 2

4

我认为它不起作用,因为您将错误的参数传递给控制器​​。

尝试传递对象而不是字符串。

 public class BatteryInfo
    {
       public long brand {get;set;}
       public int height {get;set;}
       etc.
    }

然后在控制器中接收它

ublic ActionResult SaveBatterySpecs(BatteryInfo battery)

为什么不序列化表单而不是从表单元素中收集所有数据?在这里查看详细信息

于 2013-06-17T14:54:20.530 回答
1

我会建议 maxs87 带来什么,在其中发布实际对象而不是表示数据的字符串。

但是如果你真的只想接受一个字符串,你仍然需要匹配的变量名:

这将发布一个名为 的参数batteryData,其值是代表所有数据的 JSON 字符串。在控制器上,您的batteryData变量将填充一个您可以手动反序列化的 JSON 字符串。

data: {
    batteryData: JSON.stringify({
        art: $("#art" + id).val(),
        brand: $("#brand" + id).val(),
        name: $("#name" + id).val(),
    })
},
于 2013-06-17T15:11:49.060 回答