我在一个我的应用程序中使用AJAX Helper方法,事情都很好而且突然面对这个奇怪的问题,即在视图中
<% using (Ajax.BeginForm("Feedback", "User", new AjaxOptions { InsertionMode = InsertionMode.InsertBefore, HttpMethod = "POST", OnFailure = "searchFailed", OnSuccess = "feedbackRecorded", LoadingElementId = "ajax-loader-fb", UpdateTargetId = "newsletter", }, new { @id = "feedback" })) { %>
作为{action name}的Ajax.BeginForm的第一个参数现在被标记为红色(我正在使用Resharper)并且说'无法解析动作'ActionName'',但是Action存在于我的控制器中
另一个奇怪的事情是,在运行应用程序并提交表单时,它最终会调用Javscript的“OnSuccess”方法,就好像它已经成功但实际上什么也没发生,它甚至没有达到指定的第一行调用控制器动作。(这在视图中的两个AJAX表单中都会发生)
有没有人对于突然出现这种行为的可能原因有任何想法?
三江源!
我刚刚创建了一个新的'SharedController'控制器,其中包含相同的操作,现在它正在识别,但它在UserController中无法识别?
public class SharedController : Controller
{
public ActionResult Feedback()
{
throw new NotImplementedException();
}
}
答案 0 :(得分:3)
Maven,关于ReSharper - 它正在抱怨,因为你使用这种方法重载
public static MvcForm BeginForm(
this AjaxHelper ajaxHelper,
string actionName,
Object routeValues,
AjaxOptions ajaxOptions,
Object htmlAttributes)
其中第二个参数是routeValues,因此ReSharper在当前控制器中查找“Feeeback”动作。
显然,你需要另一个重载,使用这个调用
<% using (Ajax.BeginForm("Feedback", "User", null, new AjaxOptions { InsertionMode = InsertionMode.InsertBefore, HttpMethod = "POST", OnFailure = "searchFailed", OnSuccess = "feedbackRecorded", LoadingElementId = "ajax-loader-fb", UpdateTargetId = "newsletter", }, new { @id = "feedback" })) { %>
注意第三个 null 参数。
答案 1 :(得分:1)
Ajax.BeginForm
的第二个参数是控制器名称。
尝试将代码更改为:
<% using (Ajax.BeginForm("Feedback", "Shared", ...
答案 2 :(得分:0)
就Javascript首先解雇而言,这篇文章可能与此相关:
Asp.NET MVC AjaxOptions OnSuccess fires.. too early?
我的猜测是Javacript在找到动作之前发射,但无论出于什么原因,动作都是错误的,而且找不到它。