Javascript 在控制器上找不到MVC a公共操作方法

Javascript 在控制器上找不到MVC a公共操作方法,javascript,jquery,ajax,asp.net-mvc,twitter-bootstrap,Javascript,Jquery,Ajax,Asp.net Mvc,Twitter Bootstrap,以下是控制器: [HttpPost] public ActionResult Save(HelloWorldMvcApp.ProductData model, string[] imgToDelete) { return Json(new { success = true }); } 以下是观点: @model HelloWorldMvcApp.ProductData model @{ V

以下是控制器:

  [HttpPost]
        public ActionResult Save(HelloWorldMvcApp.ProductData model, string[] imgToDelete)
        {
            return Json(new { success = true });
        }
以下是观点:

  @model HelloWorldMvcApp.ProductData model

    @{
        ViewBag.Title = "Edit";
        Layout = "~/Views/Shared/_SharedLayout.cshtml";
    }

    <h2>Edit</h2>

    @using (Ajax.BeginForm(new AjaxOptions { UpdateTargetId = "divProductData", OnSuccess = "hideModal", Url = Html.Action("Save").ToHtmlString() }))
    {
        <div id="divProductData">
         <table>
         <tr>
            <td>
              @Html.HiddenFor(a => a.id)
            </td>
            <td>
              @Html.TextBoxFor(a => a.productDesc)
            </td>
         </tr>
         <tr>
            @foreach (string path in Model.picture.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries))
                    {
                        <td>
                            <input type="checkbox" name="imgToDelete" value="@path">
                            <br />
                            <img src='~/Images/Product/@path' />
                        </td>
                    }
          </tr>


            </table>

        </div>
       }

  @section scripts{
      <script>
        function hideModal() {
            $('.modal').modal('hide');
            $('body').removeClass('modal-open');
            $('.modal-backdrop').remove();
        }
    </script>
  }
@model HelloWorldMvcApp.ProductData模型
@{
ViewBag.Title=“编辑”;
Layout=“~/Views/Shared/\u SharedLayout.cshtml”;
}
编辑
@使用(Ajax.BeginForm(新的AjaxOptions{UpdateTargetId=“divProductData”,OnSuccess=“hideModal”,Url=Html.Action(“Save”).ToHtmlString())
{
@Html.HiddenFor(a=>a.id)
@Html.TextBoxFor(a=>a.productDesc)
@foreach(Model.picture.Split中的字符串路径(新字符串[]{,“},StringSplitOptions.RemoveEmptyEntries))
{

} } @节脚本{ 函数hideModal(){ $('.modal').modal('hide'); $('body').removeClass('modal-open'); $('.modal background').remove(); } }
使用(Ajax.BeginForm(新的AjaxOptions{UpdateTargetId=“divProductData”,OnSuccess=“hideModal”,Url=Html.Action(“Save”).ToHtmlString())在
@处引发异常。

{“在控制器上找不到公共操作方法“Save” “HelloWorldMvcApp.ProductDataController.”

下面是代码的提琴:

如何修复此错误

我尝试使用Ajax.BeginForm而不是Html.BeginForm,因为此页面显示在引导模式中,经过一些研究,如果我使用Html.BeginForm,我无法调用“hideModal”函数


如果我错了,请纠正我

哦。。。我发现,首先,我将操作名称移到了AjaxOptions之外,然后在控制器中将
[HttpPost]
属性更改为
[AcceptVerbs(HttpVerbs.Get)]
,并在JSON结果中添加了
JsonRequestBehavior.AllowGet
,结果如下:


尝试指定控制器名称

@using (Ajax.BeginForm(new AjaxOptions { UpdateTargetId = "divProductData", OnSuccess = "hideModal", Url = Html.Action("Save","controllerName").ToHtmlString() }))

如果要生成url,则其
@url.Action(“Save”)
,而不是
@Html.Action(“Save”)
-
Html.Action()
调用一个方法并呈现该方法返回的部分视图。如果确实要执行“Save”,则通常是
POST
操作。因此,您可以将
[HttpPost]
的属性保留在控制器上,并在
AjaxOptions
--
newajaxoptions{HttpMethod=“POST”,UpdateTargetId=“divProductData”,OnSuccess=“hideModal”}