1

我正在使用属性路由获取页面的动作。但是当我发布它时,ajax表单忽略了我在参数中定义的动作和控制器,并尝试使用get方法发布到相同的url。Ajax.BeginForm忽略MVC中参数中定义的动作和控制器5

这是我取得动作:

[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" /> 

} 

这生成的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> 

单击按钮时。发布到域/路径的帖子正在发射。为什么我定义的操作被忽略?

+0

您可以发布由您Ajax.BeginForm生成的HTML?我怀疑它一直没有找到你的路线,所以它已经把它留作空白,它会击中你的网站的根。 – Slicksim

+0

@Slicksim我已经更新了这个问题。 – gkon

+0

您是否也在控制器上定义了路由?或只是在这一个行动? – Slicksim

回答

0
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

+0

默认路由已在路由配置中定义。 – gkon

+0

如果你在你的页面上使用了这些脚本,请给我们提供错误 Avin

+0

我正在使用jQuery和Unobtrusive Ajax,但没有任何错误或某事。它只是产生一个不同于所需的网址。 – gkon