我正在使用属性路由来获取页面的操作。但是当我发布它时,ajax表单忽略了我在参数中定义的动作和控制器,并尝试使用get方法发布到相同的URL。
这是我的行动:
[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 :(得分: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
中的所有路由的最后一个答案 1 :(得分:0)
我能够通过在Controller / Action之后添加空RouteValue来解决此问题:
@using (Ajax.BeginForm("Action", "Controller", null, new AjaxOptions() { HttpMethod = "POST", UpdateTargetId = "someDiv" }))
{
@SomeInput
<input type="submit" value="send"/>
}
在我的示例中,我有一个EditorTemplate及其自己的Ajax.BeginForm定义。当我从DisplayTemplate内渲染那个EditorTemplate时,它会将子EditorTemplate的Controller目标覆盖为父DisplayTemplate所使用的Controller目标,但是它保持相同的Action。因此,至少在我的情况下,如果没有提供,则看起来RouteValues被覆盖了。