2

我是 MVC 和这种编程的新手,我想这很简单,但经过 5 个小时的搜索和尝试,我感到很受挫。我的视图中有一个看起来像这样的帖子;

 $.ajax({
        url: '@Url.Action("Moo")',
        type: "post",
        dataType: "string",
        contentType: "json",
        data: JSON.stringify({"foo": "bar"}),
        success: function (data) {}
        });
    });

然后我在控制器中有一个看起来像这样的函数;

Function Moo(test As String) As ActionResult
    Return View()
End Function

当我运行它时,调试器显示我到达了返回语句,但我没有得到任何要分配任何值的测试(foo:bar)。

我的另一个考虑是,当我设法从 ajax 函数接收数据时,我可以将其转换回 JSON 还是我必须在模型中创建自己的类并将变量分配给该类?

任何输入都会被应用。

4

3 回答 3

1

参数/属性名称应匹配。

因此,如果您希望test在操作中使用名称的值,则需要使用 key 发送值test。所以foo改为test

$.ajax({
        url: '@Url.Action("Moo")',
        type: "post",
        dataType: "string",
        contentType: "application/json",
        data: JSON.stringify({"test": "bar"}),
        success: function (data) {}
        });
    });

注意 JSON 的正确 contentType 是application/json

如果您有更复杂的数据,例如JSON.stringify({"test": "bar", "test1":"bar1"}), 您可以在服务器端创建一个对象(对不起 C#)

public class MyClass
{
    public string test { get; set; }

    public string test1 { get; set; }
}

那么你可以在你的行动中使用这个模型:

Function Moo(test As MyClass) As ActionResult
    Return View()
End Function

MVC 模型绑定器将负责解析数据并填充属性。您可以从这里开始学习模型绑定:ASP.NET MVC 模型绑定的特性和缺点

于 2013-01-28T06:20:06.360 回答
0

这在另一种方法中你可能想尝试[虽然它可能不是最好的]

$.ajax({
        url: '@Url.Action("Moo")?test="testdata"',
        type: "post",
        dataType: "string",
        contentType: "json",
        data: JSON.stringify({"test": "bar"}),
        success: function (data) {}
        });
    });

您传递的参数名称应与服务器上操作方法的参数名称匹配。

于 2013-01-28T06:20:13.287 回答
0

我认为你必须改变这一点:

$.ajax({
    url: '@Url.Action("Moo")',
    type: "post",
    dataType: "text", //<---------------------this
    contentType: "application/json", // <-----this 
    data: JSON.stringify({"foo": "bar"}),
    success: function (data) {}
    });
});

或者您也可以尝试更改此设置:

data: {foo : "bar"},

数据类型是:

  • "xml":返回一个可以通过 jQuery 处理的 XML 文档。
  • "html":以纯文本形式返回 HTML;包含的脚本标签在插入 DOM 时进行评估。
  • "script":将响应评估为 JavaScript 并将其作为纯文本返回。
  • "json":将响应评估为 JSON 并返回一个 JavaScript 对象。
  • "jsonp":使用 JSONP 加载 JSON 块。添加一个额外的“?callback =?” 到 URL 的末尾以指定回调。
  • "text":纯文本字符串。
于 2013-01-28T06:25:55.413 回答