自定义RouteConfig干扰HttpPost返回View()

时间:2017-05-09 19:42:26

标签: asp.net-mvc

我配置了几个自定义路由,似乎干扰了我的控制器。 GET索引操作正常,但如果POST索引操作返回View,则会出现问题。它最终会走向不同的路线。所以我在这里访问我的网站http://mywebsitehere/sms,它会完成GET索引操作并呈现表单。

当我提交表单时,它会运行POST操作,如果ModelState不有效,则转到return View(model)行。然后我在NavigationController中收到错误,因为它试图获取一些不在那里的RouteData。它不应该在我的NavigationController中结束。

我的路线:

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

routes.MapRoute(
    name: "Conference",
    url: "conf/{conferenceCode}/{controller}/{action}",
    defaults: new { conferenceCode = "", controller = "Home", action = "Overview" }
);

这是我的控制器的一个例子:

public ActionResult Index()
{
    ViewBag.IsHome = true;
    ViewBag.Theme = "a";

    return View();
}

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Index(SendSMSPageViewModel model)
{
    if (ModelState.IsValid)
    {
        // DO STUFF HERE

        ModelState.Clear();

        return RedirectToAction("Index");
    }

    return View(model);
}

最后我的观点:

@using (Html.BeginForm("Index", "SMS", FormMethod.Post, new { data_ajax = "false" }))
{
    @Html.AntiForgeryToken()
    @* My Form stuff here *@
}

1 个答案:

答案 0 :(得分:0)

这是我的错误。有人给了我一些建议,我想出了问题所在。我之前没有发布的一些代码:

ViewBag.IsHome = false;

这是我的GET,但不是我的POST,没有它运行部分视图,我不想运行。