当按下按钮时,我似乎无法执行将字符串传递给控制器的这个非常简单的任务。收到的数据始终为空。有人能告诉我我做错了吗?
形式:
<form>
<div class="form-group">
<label for="ProcessName" class="control-control">Process Name</label>
<input id="ProcessName" class="form-control" placeholder="Choose process name">
<small id="subtitle" class="form-text text-muted">Text under input field.</small>
</div>
<button type="submit" class="btn btn-primary" id="addElement">Submit</button>
</form>
使用Javascript:
$(function () {
$("#addElement").click(function () {
var processName = $("#ProcessName").val();
// I've tried this method
$.post('@Url.Action("AddProcessName")', processName, function (data, status) {
alert(data)
});
// And also this one, but both of them don't work.
// I did not try them at the same time, of course
$.ajax({
type: "POST",
url: '@Url.Action("AddProcessName")',
data: processName,
dataType: 'text',
success: function (response) {
alert(response)
};
});
});
});
服务器端:
[HttpPost]
public IActionResult AddProcessName(string data)
{
pm.ID = 1;
pm.Name = data; // I put a breakpoint here to check the value of 'data'
return Content(pm.Name);
}
答案 0 :(得分:2)
您告诉您的行动期望名为data
的变量,但您并未发送该变量。您需要将jQuery AJAX请求的data
属性更改为:
data: { data: processName },
我还建议您从Action返回JSON,因为纯空文本可能是片状的,因为空格可能会或可能不会被解释。试试这个:
$("#addElement").click(function () {
$.ajax({
type: "POST",
url: '@Url.Action("AddProcessName")',
data: {
data: $("#ProcessName").val()
},
dataType: 'json',
success: function(response) {
// use console.log for debugging, and access the property of the deserialised object
console.log(response.Name);
};
});
});
[HttpPost]
public IActionResult AddProcessName(string data)
{
pm.ID = 1;
pm.Name = data;
return Json(new { Name = pm.Name });
// or just:
// return Json(pm);
}