c# - 对 ASP post 方法的 Ajax 调用不断给出 null 参数

标签 c# asp.net ajax asp.net-mvc knockout.js

我有一个动态添加项目的表单,你只需要一个名称......我使用 KnockOut js html 看起来像这样:

<div data-bind="foreach: tmgs">
    <i>Naam:</i>
    <input type="text" required data-bind="value: name" /><br />
</div><br/>
<button class="btn btn-default" data-bind="click: addtmg">New item</button>

<ul data-bind="foreach: tmgs">
    <li data-bind="text: name"></li>
</ul>
<button class="btn btn-success" id="Save">Save Item</button>

我使用的 JS 脚本如下所示:

 var model = {
        tmgs: ko.observableArray(),
        addtmg: function () {
            this.tmgs.push({ name: ko.observable() });
        }
    };

    ko.applyBindings(model);
    var json = ko.toJSON(model);

    $("#Save").click(function (e) {
        $.ajax({
            url: "@Url.Action("AddItem")",
            type: 'POST',
            contentType: 'application/json; charset=utf-8',
            data: JSON.stringify(ko.toJS(model.tmgs)),
            success: function (status) {
                alert(status);
            }
        });
    });

ASP 方法如下所示:

[HttpPost]
public JsonResult AddItem(List<string> tmgs)
{
    if (tmgs == null)
    {
        return Json("False");
    }
    foreach (string item in tmgs)
    {
        if (!String.IsNullOrEmpty(item))
        {
            server.CreateItem(item);
        }
    }
    return Json("True"); 
}

当我运行此代码时,该方法将收到一个列表,但第一个列表仅包含 NULL 项。我也用过这个:

$("#Save").click(function (e) {
    $.ajax({
        url: "@Url.Action("AddItem")",
        type: 'POST',
        contentType: 'application/json; charset=utf-8',
        data: ko.toJSON(model).tmgs,
        success: function (status) {
            alert(status);
        }
    });
});

和:

data: ko.toJSON(model.tmgs),

这次参数也不是列表,只是NULL

我做错了什么?

@nemesv 的解决方案有效

[HttpPost]
public JsonResult AddItem(List<Tmg> tmgs)
{
   ...
}

public class Tmg 
{
    public string name { get; set; }
}

在这种情况下,使用 data: ko.toJSON(model.tmgs), 发送数据应该可以正常工作。

最佳答案

您的 Controller 参数不匹配,即 List<string>以及您发送的数据是一个带有 name对象列表包含数据的属性。

所以你需要发送一个字符串数组来获取name每个 tmg 的属性:

data: JSON.stringify(model.tmgs().map(function(item) { return item.name() })),

或者您需要更改您的 Controller 以获取 tmg 对象列表:

[HttpPost]
public JsonResult AddItem(List<Tmg> tmgs)
{
   ...
}

public class Tmg 
{
    public string name { get; set; }
}

在这种情况下使用 data: ko.toJSON(model.tmgs), 发送数据应该可以正常工作。

关于c# - 对 ASP post 方法的 Ajax 调用不断给出 null 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41427966/

相关文章:

c# - 开源 C# 套接字(TCP + UDP)库

c# - 在 Android 设备上开发 C#/.NET

asp.net - 是否应该将project.lock.json 文件 checkin 源代码管理? (ASP.NET 核心 1.0)

javascript - 使用 Django 和 extjs 进行分页

php - 没有 iFrame 或 flash 引擎的 ajax php 文件上传

c# - 具有多个键的 OData

c# - 有人知道基于网络的学习小组的源代码吗?

c# - 如何搜索包含 2 个特定字符串的所有文件?

C#:如何将参数键/值传递给函数?

javascript - 淡化更新面板上的背景颜色