javascript - HttpPost 控制器参数 null ASP.NET CORE MVC
问题描述
我正在为模态对话框上的按钮编写一个 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 () { }
});
}
动作方法是:
[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。这可能是什么原因?任何指针都会有所帮助。提前致谢!
解决方案
来自女士文档:
使用 [FromBody] 强制 Web API 从请求正文中读取简单类型,将 [FromBody] 属性添加到参数
这意味着如果你使用 FromBody 你只能传递原始参数:
[HttpPost]
public ActionResult CloneValues([FromBody]string text)
{
//logic
}
你需要的是 FromUri
使用 [FromUri] 要强制 Web API 从 URI 中读取复杂类型,请将 [FromUri] 属性添加到参数中。以下示例定义了 GeoPoint 类型,以及从 URI 获取 GeoPoint 的控制器方法。
[HttpPost]
public ActionResult CloneValues([FromUri]EditModel model)
{
//logic
}
推荐阅读
- html - 需要帮助将我的文本字段与我的单选按钮对齐
- node.js - 是否可以在 Angular 代码中使用 Node DNS 模块?
- r - 使用 Rvest 抓取:使用 html_attr('href') 不会拾取链接
- c# - 在固定语句中声明的局部类型必须是指针类型
- regex - Dialogflow projects.agent.intents.list
- tensorflow - 无法解释迁移学习中的建模行为
- c# - 将“th”添加到gridview中的行
- java - 如何从页面使用 Solrj 重新启动 SOLR 搜索?
- python-3.x - 如何将 Total Commander 的参数传递给 Python 脚本。我是否使用了正确的环境?
- reactjs - EventListener“推送”通知在 PWA reactjs 中不起作用