C# 用于以HTML形式实现PUT的AJAX代码似乎没有执行
我的网站使用我编写的API。目前我已经写了一个使用GET的页面和一个使用POST的页面。然而,我在PUT方面遇到了很多麻烦 我目前有两个同名的函数,但参数不同。我有ChangeOneEmu()和ChangeOneEmu(emuitemodel),第二个是“put”方法 我通过前面的一个问题了解到,由于HTTP不支持PUT,所以我无法获取HTTP表单,甚至无法获取通过PUT方法发送内容的标记。所以我一直在尝试使用AJAX通过PUT发送它,但它似乎也不起作用 本质上,现在发生的事情是,我的函数使用no参数调用视图,该视图正确加载视图,我可以很好地输入数据。但是,当我按下“提交”按钮时,它不会转到我的PUT方法(在model参数中执行的操作)。它只是返回到无参数操作 以下是我在控制器中实现的代码:C# 用于以HTML形式实现PUT的AJAX代码似乎没有执行,c#,ajax,asp.net-core,C#,Ajax,Asp.net Core,我的网站使用我编写的API。目前我已经写了一个使用GET的页面和一个使用POST的页面。然而,我在PUT方面遇到了很多麻烦 我目前有两个同名的函数,但参数不同。我有ChangeOneEmu()和ChangeOneEmu(emuitemodel),第二个是“put”方法 我通过前面的一个问题了解到,由于HTTP不支持PUT,所以我无法获取HTTP表单,甚至无法获取通过PUT方法发送内容的标记。所以我一直在尝试使用AJAX通过PUT发送它,但它似乎也不起作用 本质上,现在发生的事情是,我的函数使用n
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");
}
public IActionResult ChangeOneEmu()
{
返回视图(新项目());
}
[HttpPut]
异步公共任务ChangeOneEmuNew(EmuItem模型)
{
var response=await client.PutAsJsonAsync(model.SearchName,model);
返回操作(“索引”);
}
以下是我在我看来实现的代码:
@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>
@model HelloEmuWebsite.Models.emubitem
$(文档).ready(函数(){
$(“提交”)。单击(函数(){
$.ajax({
url:'@url.Action(“changeoneumnew”,“Home”),
键入:“PUT”,
数据:$('ChangeForm').serialise(),
//数据类型:“json”,
成功:功能(结果){
警报(结果);
}
});
返回false;
});
});
@LabelFor(x=>x.SearchName)
@Html.TextBoxFor(x=>x.SearchName)
@LabelFor(x=>x.Name)
@Html.TextBoxFor(x=>x.Name)
@LabelFor(x=>x.Age)
@Html.TextBoxFor(x=>x.Age)
@LabelFor(x=>x.Weight)
@Html.TextBoxFor(x=>x.Weight)
以防万一,下面是我实际的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);
}
[HttpPut(“{id}”)]
public ActionResult Put(字符串id,[FromBody]Models.EmuItem ChangedEmu)
{
if(ModelState.IsValid)
{
返回MyEmus.ChangeEmu(id,ChangedEmu);
}
返回请求(ModelState);
}
我想得到任何帮助。我不确定我是否从根本上误解了ASP.NET核心MVC模式是如何运行的,窗体是如何运行的,AJAX是如何运行的,或者这三种模式都是或没有。谢谢。在视图中进行以下更改:
serialize
的拼写错误与此有关吗?@jPhizzle不,不幸的是。奇怪的是,VS并没有发现那个拼写错误。怎么样。。返回Ok(MyEmus.ChangeEmu(id,ChangedEmu);
而不是返回MyEmus.ChangeEmu
,因为Put方法返回ActionResult
…并将ActionResult
更改为仅ActionResult Put(字符串id…)
等
<form method="put" id="changeemuform">
@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>
}