我的网站使用了我编写的API。目前,我已经编写了一个使用GET的页面和一个使用POST的页面。我在PUT上遇到很多麻烦。
我目前有两个名称相同,但参数不同的函数。我有ChangeOneEmu()和ChangeOneEmu(EmuItem model),第二个是“ put”方法。
我从我的上一个问题中学到,由于HTTP不支持PUT,因此我无法获取HTTP表单,甚至不能通过PUT方法发送标签。因此,我一直在尝试使用AJAX通过PUT发送它,但它似乎也没有起作用。
从本质上讲,到目前为止发生的事情是我的带有 no 参数的函数调用了视图,该视图正确加载了视图-我可以输入数据了。但是,当我按下“提交”按钮时,它不会进入我的PUT方法(执行模型参数的操作)。它只是返回到无参数操作。
这是我在控制器中实现的代码:
public IActionResult ChangeOneEmu()
{
return View(new EmuItem());
}
[HttpPut]
async public Task<IActionResult> ChangeOneEmuNew(EmuItem model)
{
var response = await client.PutAsJsonAsync(model.SearchName, model);
return RedirectToAction("Index");
}
这是我在View中实现的代码:
@model HelloEmuWebsite.Models.EmuItem
<script>
$(document).ready(function () {
$("SubmitMe").click(function () {
$.ajax({
url: '@Url.Action("ChangeOneEmuNew", "Home")',
type: 'PUT',
data: $('changeemuform').serialise(),
//dataType: 'json',
success: function (result) {
alert(result);
}
});
return false;
});
});
</script>
<form method="put" id="SubmitMe">
<div>
@Html.LabelFor(x => x.SearchName)
@Html.TextBoxFor(x => x.SearchName)
</div>
<div>
@Html.LabelFor(x => x.Name)
@Html.TextBoxFor(x => x.Name)
</div>
<div>
@Html.LabelFor(x => x.Age)
@Html.TextBoxFor(x => x.Age)
</div>
<div>
@Html.LabelFor(x => x.Weight)
@Html.TextBoxFor(x => x.Weight)
</div>
<input type="submit" value="OK" id="SubmitMe" ; />
</form>
以防万一,这是我实际的API实现:
[HttpPut("{id}")]
public ActionResult<List<Models.EmuItem>> Put(string id, [FromBody] Models.EmuItem ChangedEmu)
{
if (ModelState.IsValid)
{
return MyEmus.ChangeEmu(id, ChangedEmu);
}
return BadRequest(ModelState);
}
我很乐意为您提供任何帮助。我不确定我是否从根本上误解了ASP.NET CORE MVC模式的运行方式,表单的运行方式或AJAX的运行方式,或者全部还是三个都不存在。谢谢。
答案 0 :(得分:1)
在您的视图中进行以下更改:
在id="changeemuform "
中添加<form>
<form method="put" id="changeemuform">
将您的jQuery放入@section Scripts {}
,并使用正确的格式$("#id")
@section Scripts
{
<script type="text/javascript">
$(document).ready(function () {
$("#SubmitMe").click(function () {
$.ajax({
url: '@Url.Action("ChangeOneEmuNew", "Home")',
type: 'PUT',
data: $('#changeemuform').serialize(),
//dataType: 'json',
success: function (result) {
alert(result);
}
});
return false;
});
});
</script>
}