0

我正在使用显示模块模式和淘汰赛来绑定表单。当以该表单(注册)输入数据时,需要将其发布回 MVC4 Web 方法。

这是Jquery代码

    /*
Requires JQuery
Requires Knockout
*/
op.TestCall = function () {

    // Private Area
    var _tmpl = { load: "Loading", form: "RegisterForm"};

    var
    title = ko.observable(null)
    template = ko.observable(_tmpl.load),
    msg = ko.observable(),

    postData = ko.observable(),

    PostRegistration = function () {
        console.log("Ajax Call Start");
        var test = GetPostData();
        $.ajax({

            type: "POST",
            url: obj.postURL, //Your URL here api/registration
            data: GetPostData(),
            dataType: "json",
            traditional: true,
            contentType: 'application/json; charset=utf-8'


        }).done(Success).fail(Failure);
        console.log("Ajax Call End");
    },
    GetPostData = function () {
        var postData = JSON.stringify({
            dummyText1: dummyText1(),
            dummyText2: dummyText2(),

        });
        return postData;

    }


    return {
        // Public Area
        title: title,
        template: template,
        dummyText1: dummyText1,
        dummyText2: dummyText2
    };
}();

控制器代码现在很简单

 // POST api/registration
    public void Post(string data)
    {

        ///TODO

    }

当我尝试捕获数据(使用简单的 console.log)并在 jslint.com 中验证它时,它是一个有效的 Json。

  1. 我尝试将数据硬编码为

    数据:“{data:'{\'name\':\'niall\'}'}”,但在我的网络方法中,我仍然得到空值。

  2. 在受控的情况下将标签添加[System.Web.Script.Services.ScriptMethod(UseHttpGet = false, ResponseFormat = System.Web.Script.Services.ResponseFormat.Json)]到我的 Post 方法中,但仍然没有卓有成效的结果

  3. 甚至尝试过 JSON.Stringifydata: JSON.stringify(data)但我的网络方法仍然为空。

我无法弄清楚解决方案。

在此链接http://forums.asp.net/t/1555940.aspx/1中发现了类似的问题, 甚至使用 jQuery Ajax 将参数传递给 WebMethod 但对我没有帮助:(

4

2 回答 2

0

MVC 和 WebApi 使用模型绑定的概念。

所以最简单的解决方案是,您需要创建一个与发送的 Json 数据的结构相匹配的 Model 类来接受服务器上的数据:

public void Post(MyModel model)
{
   ///TODO
}

public class MyModel
{
   public string DummyText1 { get; set; }

   public string DummyText1 { get; set; }
}

注意:json 和 C# 属性名称应该匹配。

于 2012-07-30T07:54:03.277 回答
0

只允许转义的双引号字符,而不是单引号,因此您只需将单引号替换为双引号:

data: "{data: '{\"name\":\"niall\"}'}"

或者如果你想使用 stringify 函数,你可以这样使用它:

data: "{data: '" + JSON.stringify(data) + "'}"
于 2013-09-03T15:20:22.970 回答