knockout.js 如何在C#中向ASP.NET Core MVC控制器发送数据?

mnemlml8  于 2022-11-10  发布在  C#
关注(0)|答案(1)|浏览(158)

我正在尝试从我的Javascript发送数据到我的post方法控制器。我有knockout作为我的方法从Javascript绑定到我的视图。
这是我的控制器,convocationData在这里为空

public async Task<ActionResult> CreateConvocation(string convocationData)
{
    string baseUrl = "http://localhost:8080";
    HttpClient client = new HttpClient();
    client.BaseAddress = new Uri(baseUrl);

下面是我尝试使用jQuery调用该方法的过程:

var tmpSession = self.addSession();
var tmpDescription = self.addDesc();
var convocationData = {
            sessionCode: tmpSession,
            description: tmpDescription
        };

$.ajax({
            url: '/Convocations/CreateConvocation',
            type: 'POST',
            dataType: 'json',
            data: JSON.stringify(convocationData),
            contentType: 'application/json',
            success: function (data) {
                self.Convocations.push(new Convocation(self.addSession(), self.addDesc()));
                self.addDesc("");
                self.addSession("");
            },
            error: function (err) {
                alert(err.status + " : " + err.statusText);
            }
        });
uqxowvwt

uqxowvwt1#

像这样添加[FromBody]属性

[HttpPost]
public async Task<ActionResult> CreateConvocation([FromBody]string convocationData)
{
    return text;
}

你可以在这里阅读更多Accepting Raw Request Body Content with ASP.NET Web API

更新:

另外,阅读zgood对你帖子的评论,你应该创建一个相应的模型,而不是使用JSON.stringify,就像他在评论中描述的那样。

更新2:

JS模型类

class Convocation {
  constructor(sessionCode, description) {
    this.sessionCode = sessionCode;
    this.description = description;
  }
}

C# DTO类别

public class Convocation
{
    public string SessionCode{ get; set; }
    public string Description { get; set; }
}

然后,您可以将您的操作方法更新为

[HttpPost]
public async Task<ActionResult> CreateConvocation([FromBody]Convocation convocation)
{
    return text;
}

和 AJAX 发布到以下内容:

$.ajax({
    url: '/Convocations/CreateConvocation',
    type: 'POST',
    dataType: 'json',
    data: new Convocation(tmpSession, tmpDescription),
    contentType: 'application/json',
    success: function(data) {
        self.Convocations.push(new Convocation(self.addSession(), self.addDesc()));
        self.addDesc("");
        self.addSession("");
    },
    error: function(err) {
        alert(err.status + " : " + err.statusText);
    }
});

我没有测试代码,但它应该工作。

相关问题