【问题标题】:ASP.NET CORE MVC AJAXASP.NET CORE MVC AJAX
【发布时间】:2017-08-03 21:18:39
【问题描述】:

当下拉列表的值发生变化时,我想放置一个局部视图。 使用我的代码它可以工作,但是当我想使用 post 方法向控制器发送数据时,我总是有空值(控制器参数总是有空数据)。我见过很多不同的方法,但没有一种方法适合我。

我查看ajax代码:

@section scripts {
<script type="text/javascript">

    $("#ProjecteId").on("change", function () {
        var request = JSON.stringify({
            'ProjecteId': $('#ProjecteId').val()
        });
        console.log(request);
        $.ajax({
            type: 'Post',
            url: '/Consultas/MostrarTipusPersona',
            dataType: 'html',
            contentType: 'application/json',
            data: request,
            success: function (data) {

                console.log('sample', data);
            },
            error: function () {
            }
        });
    });
</script>

}

我的控制器:

         [HttpPost]
    public IActionResult MostrarTipusPersona(ProjecteModel pm)
    {
        return PartialView("_Ciutada", new Ciutada());
    }

【问题讨论】:

  • 我能发现的东西: 在你的 ajax 对象的 type 字段中:type : "post" 另外请说明你在哪里得到空值?是返回 Ajax 还是您发布的数据?更多信息,我可以为您提供帮助。
  • 嗨@Terrance00,我在控制器中收到空数据,参数ProjecteId始终为空。我已经修改了我的帖子以澄清这一点,非常感谢!

标签: asp.net-core-mvc asp.net-ajax


【解决方案1】:

首先验证客户端数据:

由于没有提供 html,请记录您的 json:

var request = ...
console.log(request);
$.ajax(...)

确保您的服务器端需要正确的数据

在您的代码中,服务器端需要一个带有字符串成员的对象。所以让我们给它。我们将创建一个代表您发送到服务器的 json 对象的对象:

public class ProjectedModel
{
    public string ProjecteId {get;set;}
}

现在修改你的方法以期望这个模型:

public IActionResult MostrarTipusPersona(ProjectedModel model)  

PS:看起来您的客户端 ajax 方法需要 json。我建议从您的 ajax 方法中删除 dataType: "json",因为数据类型将是 partialhtml 视图。 (只需将其作为字符串接收 - 或扩展您的问题以便我们确定。)

编辑:

传递一个字符串值似乎是个问题,有两件事可以尝试:

(1)用toString()方法将数据转为字符串

 var request = JSON.stringify(
        {'ProjecteId': ($('#ProjecteId').val()).toString()
    });

(2) 像这样内联:

var request = JSON.stringify({
    'ProjecteId': "'" + $('#ProjecteId').val() + "'"
});

当然,您的另一个选择是简单地发送一个整数。

【讨论】:

  • 首先,非常感谢您帮助我:) 请求中有这些数据:{"ProjecteId":"2"},我认为它是正确的。模型 ProjecteModel(没有 [FromBody])不为空,但属性 ProjecteId 有一个空值:(正确的数据类型是 html,它可以工作(数据类型:“html”),我已经更改它只是为了尝试其他方式。如果我使用 [FromBody] ProjecteModel 为空..
【解决方案2】:

我有解决方案,只需输入 contetType: 'application/x-www-form-urlencoded'。

感谢您的帮助!

【讨论】:

  • 我以为你想专门发送 json。无论如何,编辑现在应该可以工作了。
  • 好吧,你想发送json的时候到了——上面的答案可以作为你的指南。编码愉快。
猜你喜欢
  • 2020-01-25
  • 2021-05-19
  • 1970-01-01
  • 1970-01-01
  • 2019-08-04
  • 2020-09-27
  • 2021-02-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多