【问题标题】:HttpPost controller parameters null ASP.NET CORE MVCHttpPost 控制器参数 null ASP.NET CORE MVC
【发布时间】:2020-10-12 01:54:37
【问题描述】:

我正在为模式对话框上的按钮编写一个javascript函数。按钮的代码是:

<button type="button" class="btn btn-sm btn-outline-secondary" id="clone" onclick="clone(null, @Model.Id,@Model.CloneId)">Clone</button>

我有一个 onclick 函数,用于单击按钮时:

function clone(e, Id, CloneId) {

var valuesetName = $("#newValueSet").val();

var data = JSON.stringify({ 'id': Id, 'cloneId': CloneId, 'newValueSet': valuesetName });

$.ajax({
    type: "POST",
    url: '/Tests/Clone',
    data: data,
    contentType: "application/json; charset=utf-8"
    success: function () { }
});

}

ActionMethod 是:

[HttpPost]
public ActionResult Clone([FromBody]EditModel model)
{
    //logic
}

模型类是:

public class EditModel
{
    public long Id { get; set; }
    public long CloneId { get; set; }
    public string ValueSetName { get; set; }
}

当我尝试调试此代码时,AJAX 函数会正确获取值,但不会将它们传递给 ActionMethod。这可能是什么原因?任何指针都会有所帮助。提前致谢!

【问题讨论】:

  • 您使用的是 ASP.NET Core 3 吗? ValueSetName 不会绑定,因为您在 JSON 上使用 newValueSet,所以名称不匹配。 可能您可能会发送IdCloneId 的字符串,这也会失败。我只是猜测...
  • @KirkLarkin 是的,更改 json 数据以匹配 EditModel 中的名称传递了值。谢谢! :)

标签: javascript ajax asp.net-core asp.net-core-mvc http-post


【解决方案1】:

来自 Ms Docs:

使用 [FromBody] 要强制 Web API 从请求正文中读取 simple 类型,请将 [FromBody] 属性添加到参数中

这意味着如果您使用 FromBody,您只能传递 原始 参数:

[HttpPost]
public ActionResult CloneValues([FromBody]string text)
{
    //logic
}

你需要的是FromUri

使用 [FromUri] 要强制 Web API 从 URI 读取 complex 类型,请将 [FromUri] 属性添加到参数。下面的示例定义了一个 GeoPoint 类型,以及一个从 URI 获取 GeoPoint 的控制器方法。

[HttpPost]
public ActionResult CloneValues([FromUri]EditModel model)
{
    //logic
}

【讨论】:

  • 要添加 [FromUri] Visual Studio 要求我安装一个包,我这样做了,但现在它为 [HttpPost] 创建了一个模棱两可的引用,并且错误说,'HttpPost' 是 System.Web.Http.HttpPostAttributeMicrosoft.AspNetCore.Mvc.HttpPostAttribute 之间的模糊引用
  • 你可以输入 [System.Web.Http.FromUri] 而不是仅仅输入 [FromUri] 来绕过模棱两可的引用
  • @VertexGames 我仍然没有在 actionMethod 中得到任何值
  • 也许尝试更改 ajax quary 中的名称以匹配对象中的名称? Id 代替 id,CloneId 代替 cloneid.. 你明白了.. 我认为它的大小写敏感
猜你喜欢
  • 2020-09-27
  • 1970-01-01
  • 1970-01-01
  • 2020-11-19
  • 1970-01-01
  • 2018-10-09
  • 2021-07-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多