重新加载页面但在MVC中路由时由于错误的URL而得到404错误

时间:2017-08-17 18:40:59

标签: asp.net-mvc razor url-routing

我的视图称为Survey.cshtml。我当前的网址是http://localhost:17471/Campaign/Survey/6184

在此页面中,我有一个下拉菜单来选择语言。有英语和西班牙语。一个我选择语言,我想重新加载页面,因为一些上下文以不同的语言显示。我仍然希望保持相同的网址。

我的代码在Survey.cshtml

 $("#id").change(function () {
            var selectedValue = $(this).find('option:selected').text();
            window.location.href = "@Url.Action("Survey1", "Campaign", new {id=Model.SurveyModel.CampaignId, languageName = "languageToken" })".replace("languageToken", selectedValue);

        });

然而,它会转到网址http://localhost:17471/Campaign/Survey1/6184?languageName=Spanish

我的控制器CampaignController.cs有方法。

    public ActionResult Survey(int id)
    {
       // omitted code
        return View(model);
    }

    [HttpPost]
    public ActionResult Survey1(int id, string languageName)
    {
        // omitted here
        var view = "Survey";
        return View(view,model);
    }

我在RouteConfig.cs中没有上述方法的路由。我对MVC路由不是很强。有时,我对使用http://site-address/page.html?param1=value1&param2=value2的{​​{1}}和使用http://site-address/page/value1/value2形式的MVC ROUTING的旧的和好的HTTP URL进行了混淆。

所以帮助我。

1 个答案:

答案 0 :(得分:1)

您的Survey1操作已装饰[HttpPost],这意味着您必须使用客户端的POST方法。但是当您使用window.location.href进行重定向时,它始终使用GET方法。您有两种选择:

  1. 更改您的控制器操作并移除[HttpPost]
  2. 使用POST方法及其中的值创建表单,并使用javascript触发该表单上的submit事件,而不是使用window.location.href