Ajax.begin忽略MVC 5中参数中定义的操作和控制器

Ajax.begin忽略MVC 5中参数中定义的操作和控制器,ajax,asp.net-mvc,asp.net-mvc-5,asp.net-mvc-routing,ajax.beginform,Ajax,Asp.net Mvc,Asp.net Mvc 5,Asp.net Mvc Routing,Ajax.beginform,我正在使用属性路由来获取页面的操作。但当我发布它时,ajax表单会忽略我在参数中定义的操作和控制器,并尝试使用get方法发布到同一url 这是我的get操作: [AllowAnonymous] [HttpGet] [Route("path")] public ActionResult Action() { return View(); } 这是我的帖子: [AllowAnonymous] [HttpPost] public JsonResult Action(Model model)

我正在使用属性路由来获取页面的操作。但当我发布它时,ajax表单会忽略我在参数中定义的操作和控制器,并尝试使用get方法发布到同一url

这是我的get操作:

[AllowAnonymous]
[HttpGet]
[Route("path")]
public ActionResult Action()
{
    return View();
}
这是我的帖子:

[AllowAnonymous]
[HttpPost]
public JsonResult Action(Model model)
{
    return Json(true);
}
我的看法是:

@using (Ajax.BeginForm("Action", "Controller", new AjaxOptions() { HttpMethod = "POST", UpdateTargetId = "someDiv" }))
{

    @SomeInput

    <input type="submit" value="send" />

}
@使用(Ajax.BeginForm(“操作”、“控制器”、新的AjaxOptions(){HttpMethod=“POST”,UpdateTargetId=“someDiv”}))
{
@一些输入
}
生成的HTML如下所示:

<form action="/path" data-ajax="true" data-ajax-method="POST" data-ajax-mode="replace" data-ajax-update="#someDiv" id="form0" method="post">        
    <input value="submit" type="submit">
</form>

单击按钮时。向域/路径发送的邮件正在触发。为什么我定义的操作被忽略

  routes.MapRoute(
              name: "Any Name",
              url: "Any URL",
              defaults: new { Controller = "Your Ajax Controller Name ", action = "Your Ajax action Name" }
              );
或者试试这个

  routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );

将此添加到RouteConfig.cs中所有路由的最后一个

通过在控制器/操作后添加空RouteValue,我能够解决此问题:

@using (Ajax.BeginForm("Action", "Controller", null, new AjaxOptions() { HttpMethod = "POST", UpdateTargetId = "someDiv" }))
{
    @SomeInput
    <input type="submit" value="send"/>
}
@使用(Ajax.BeginForm(“Action”,“Controller”,null,new-AjaxOptions(){HttpMethod=“POST”,UpdateTargetId=“someDiv”}))
{
@一些输入
}

在我的示例中,我有一个EditorTemplate,它定义了自己的Ajax.BeginForm。当我从DisplayTemplate中呈现EditorTemplate时,它会将子EditorTemplate的控制器目标覆盖到父DisplayTemplate使用的控制器目标,但它保留相同的操作。因此,至少在我的例子中,如果没有提供RouteValue,它看起来会被覆盖。

您能发布由Ajax.begin生成的html吗?我怀疑它没能找到你的路线,所以它把它留作空白,它将击中你的根website@Slicksim我已经更新了问题。您是否也在控制器上定义了路由?还是仅在这一个操作上?@Slicksim项目中唯一的路由是RouteConfig中未编辑的默认路由。我为这个动作定义了一个属性路由。不是控制器。如果您删除[Route]并将其切换为[ActionName(“Path”)],会发生什么?如果您在页面上使用了这些脚本,请告诉我们我使用的是jQuery和低调的Ajax,但没有任何错误或其他。它只是生成了一个与所需url不同的url。