未按预期分配段变量默认值

时间:2014-06-09 05:20:19

标签: asp.net-mvc url-routing

我在RouteConfig.cs中有以下路由:

    routes.MapRoute(name: "",
        url: "{controller}/{action}/InwDocSource{id}",
        defaults: new { Controller = "InwardDocument", action = "AddDocument", id = "1" });

在我的控制器中:

   public class InwardDocumentController : Controller     
     public ActionResult AddDcument(string id){
       if(id=="1")
         ViewBag.IdInWords="The received id is ONE";
       else if(id=="2")
         ViewBag.IdInWords="The received id is TWO";
       else
         ViewBag.IdInWords="The received id is SOMETHING ELSE";
       return View("Index");// FYI the Index.cshtml is not strongly typed
     }
   }

因此上面的映射将匹配任何具有3个段的url,其中第三个段应以“InwDocSource”开头。并且所有段变量都具有默认值,以防它们未从浏览器传递。让我们假设我的根网站是www.mysite.net,上面的url映射是RouteConfig.cs文件中唯一的一个

  1. 为什么当我输入www.mysite.com时,URL匹配模式,我得到“收到的ID是一个”?我知道所有变量都默认为某些值,但映射表明第三个段必须以InwDocSource开头。
  2. 第二个更奇怪:如果我输入www.mysite.com/InwardDocument/AddDocument/InwDocSource 我得到“收到的ID是SOMETHING ELSE”,因此默认值1不会被分配给第三个段变量。为什么?

1 个答案:

答案 0 :(得分:0)

我将开始以相反的顺序回答

  1. 路线映射表示它将匹配一个包含3个网段的网址,其中第三个网段必须以InwDocSource开头。因此,当我通过www.mysite.com/InwardDocument/AddDocument/InwDocSource时,有3个段,第三个段确实以静态字符串InwDocSource开头,它不必继续或以其他方式结束。 :)所以第三段的价值变为InwDocSource,这就是为什么我得到The received id is SOMETHING ELSE

  2. 当我只传递域部分时,路由配置仍然会匹配上面的映射,因为所有三个段都有默认值,以防它们中的任何一个未明确传递。