将参数传递给ajax以调用action .net core 2不起作用

时间:2018-01-10 10:42:50

标签: jquery ajax asp.net-core

我尝试将参数传递给简单的操作,该操作返回弹出窗口中的局部视图,但我无法传递参数,就好像它没有到达操作一样。

我不明白为什么???

我使用.net core 2。

这是我的代码。

行动

[HttpPost]
public IActionResult Detail([FromBody] string tableName, [FromBody] string code)
{
    var row = tableBLL.GetAllByCode(tableName, code);
    return PartialView("~/Views/Table/Detail.cshtml");
}

jquery函数。在我应该从表中恢复之后,值patamenter被硬编码以尝试操作

 $("#dt_basic a.details").click(function() {
                    $.ajax({
                        method: "POST",
                        url: "/Table/Detail",
                        data: JSON.stringify({
                            "tableName": "IN_COMAGREE",
                            "code": "1"
                        }),
                        //data: '{code: "' + codeId + '" }',
                        contentType: "application/json",
                        //dataType: "html",
                        success: function (response) {
                            $('#dialog').html(response);
                            $('#dialog').dialog('open');
                        },
                        failure: function (response) {
                            alert(response.responseText);
                        },
                        error: function (response) {
                            alert(response.responseText);
                        }
                    });
                });

部分视图(此时非常简单)

 <form asp-action="" class="smart-form">
        <header>
            Name table
        </header>

        <fieldset>
            <section>
                <label class="label">Cod</label>
                <label class="input">
                    <input type="text" class="input-xs">
                </label>
            </section>

            <section>
                <label class="label">Descr</label>
                <label class="input">
                    <input type="text" class="input-xs">
                </label>
            </section>

        </fieldset>
    </form>

对函数的调用点

<table id="dt_basic" class="table table-striped table-bordered table-hover" width="100%">
                <thead>
                    <tr>
                        @foreach (DataColumn col in Model.Columns)
                        {
                            <th>@col.ColumnName</th>
                        }
                        <th>Action</th>
                    </tr>
                </thead>
                <tbody>
                    @foreach (DataRow row in Model.Rows)
                    {
                        <tr>
                            @foreach (DataColumn col in Model.Columns)
                            {
                                <td>@row[col.ColumnName]</td>
                            }
                                <td>

                                    <a href="#" class="details"> Edit @row[0]</a>
                                    <a href="#" class="btn bg-color-red txt-color-white btn-xs"> Delete @row[0]</a>
                                </td>
                        </tr>
                    }
                </tbody>
            </table>

1 个答案:

答案 0 :(得分:0)

ASP.NET Core documentation表示,

  

每个操作最多只能有一个参数[FromBody]。 ASP.NET Core MVC运行时将读取请求流的责任委托给格式化程序。一旦为参数读取了请求流,通常无法再次读取请求流以绑定其他[FromBody]参数。

您需要创建模型

public class TableData
{
    public string tableName { get; set; }
    public string code { get; set; }
}

然后在你的动作方法中使用它

public IActionResult Detail([FromBody] TableData table)