为什么MVC在URL中保留路由值而不直接传递它们

时间:2015-12-30 07:51:51

标签: c# asp.net-mvc routes url-routing asp.net-mvc-routing

我有一个问题。 让我们说我有这条路线:

  

/旅客/ {VAR1} / {VAR2}

     

/旅客/ {VAR1} / {VAR2} /编辑

当我在/Guest/123/321页面上时,我有/Guest/123/321/edit?id=1的链接。 页面/Guest/123/321/edit?id=1上有一个表单,该表单在同一地址上发布。

让我们说我的动作如下:

public ActionResult Index(int var1, int var2)
{
    /* here is some a business logic */    
    return View(model);
}

[HttpGet]
public ActionResult Edit(int id)
{
    /* here is some a business logic */
    return View(model);
}


[HttpPost]
public ActionResult Edit(EditModel model)
{
    /* here is some a business logic */
    return RedirectToAction("Index");
}

问题是,在我提交表单后,为什么在/Guest/123/321之后我有网址RedirectToAction("Index")?我的意思是 - 它太棒了。它减少了很多代码。我只是不喜欢使用我不理解的方法。 :)

我一直认为,为了保留网址,我应该将新的{ var1 = 123, var2 = 321 }换成新的RedirectToAction

1 个答案:

答案 0 :(得分:2)

这是MVC的一个令人困惑的部分,之前曾报告为 1 ,因为很多人都认为这种行为不自然。但根据微软的说法,这种行为是设计上的。

  
      
  1. 不幸的是,Codeplex问题网址已被删除,并且不在Internet存档中。
  2.   

行为是当未明确提供路由值时,从当前请求重用

在某些情况下效果很好,例如localizing the URL,但在其他情况下,例如using Areas时,您必须手动清除ActionLink中的值才能访问默认区域。

@Html.ActionLink("Application name", "Index", "Home", new { area = "" }, null)