C# 用于以HTML形式实现PUT的AJAX代码似乎没有执行

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

我的网站使用我编写的API。目前我已经写了一个使用GET的页面和一个使用POST的页面。然而,我在PUT方面遇到了很多麻烦

我目前有两个同名的函数,但参数不同。我有ChangeOneEmu()和ChangeOneEmu(emuitemodel),第二个是“put”方法

我通过前面的一个问题了解到,由于HTTP不支持PUT,所以我无法获取HTTP表单,甚至无法获取通过PUT方法发送内容的标记。所以我一直在尝试使用AJAX通过PUT发送它,但它似乎也不起作用

本质上,现在发生的事情是,我的函数使用no参数调用视图,该视图正确加载视图,我可以很好地输入数据。但是,当我按下“提交”按钮时,它不会转到我的PUT方法(在model参数中执行的操作)。它只是返回到无参数操作

以下是我在控制器中实现的代码:

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>
    }