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

时间:2019-07-08 18:05:32

标签: c# ajax asp.net-core

我的网站使用了我编写的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的运行方式,或者全部还是三个都不存在。谢谢。

1 个答案:

答案 0 :(得分:1)

在您的视图中进行以下更改:

  1. id="changeemuform "中添加<form>

    <form method="put"  id="changeemuform">
    
  2. 将您的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>
    }