Ajax.BeginForm表示操作不存在,但确实如此

时间:2011-09-30 11:16:02

标签: c# asp.net-mvc ajax resharper

我在一个我的应用程序中使用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();
            }
    }

3 个答案:

答案 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在找到动作之前发射,但无论出于什么原因,动作都是错误的,而且找不到它。