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