【发布时间】:2017-05-31 23:30:32
【问题描述】:
最近,当我将我的一个.NET Framework 应用程序迁移到.NET Core 1.1.Howerver 时,我遇到了一个问题,当我在视图中使用Ajax 调用Controller 方法时,我发现Controller 无法接收参数。我不解。任何人都可以帮助我解决这个问题。详情如下:
这是 .NET Core 中的代码:
视图(html):
<input id="btnSubmit" type="button" style="font-size: 14px; padding: 2px 4px;"
value="OK,Submit!" />
控制器(C#):
[NeedLogin]
public async Task<string> AddQuestion(QuestionItem qes)
{
//...
}
QuestionItem 是实体对象。
$.ajax({
type: 'post',
data: '{"qes":' + JSON.stringify(question) + '}',
url: '/q/AddQuestion',
dataType: 'Text',
success: function (data) {
if (data.indexOf("Add Failed") !== -1) {
showDialogCustom("Tips", data);
$("#btnSubmit").prop("disabled", false).val("Ok,Commit!");
} else {
if (!$("#txtQuestionMarkdown").length) {
tinyMCE.get('txtContent').setContent("");
}
$("#txtQuestion,#mySingleField").val("");
jutil.storage.deleteStorage("q_t");
jutil.storage.deleteStorage("q_c");
if (question.SaveOption) {
window.top.location.href = "/q/SaveDraftSuccess?qid=" + data;
} else {
window.top.location.href = "/q/success?qid=" + data;
}
}
},
error: function (msg) {
showDialogCustom("Wrong!", msg.responseText);
$("#btnSubmit").prop("disabled", false).val("Ok,Commit!");
}
});
我想知道为什么我的控制器无法在 .NET Core 应用程序中接收 qes 参数?
我在 .NET Framework 应用程序中成功运行它。
数据或数据类型应该是什么?
【问题讨论】:
-
您登录了吗?
NeedLogin是否通过?此外,您应该将 dataType 更改为application/JSON而不是 text(因为它 is JSON)。您可能还必须在方法上指定[HttpPost],在参数上指定[FromBody]([FromBody] QuestionItem qes) -
是的,我登录了,我也调试了,当我调试到这个控制器方法时。参数 qes 为空。但我使用
Chrome Developer Tools发现qes 不为空。所以我猜它可能是 dataType 和 ContentType。昨晚,我将数据类型更改为application/json,添加[HttpPost]和[FromBody]。它不起作用。 -
什么都没有(就您所展示的而言)。您的代码在任何版本的 MVC 中都无法正常工作。你的
question对象是什么? -
抱歉,我在
$.ajax代码前面隐藏了一些代码,question对象中的一些属性是从用户输入中获取的。
标签: c# ajax asp.net-core asp.net-core-mvc .net-core