属性路由和RouteLink

时间:2015-04-23 07:36:08

标签: c# asp.net-mvc

我定义主页视图,如

F_NAME               C_NAME     COUNT(GRADE) G
-------------------- ---------- ------------ -
CORY                 INSS300               4 B
CORY                 INSS300               4 C
CORY                 INSS421               1 A
CORY                 INSS421               1 C
CORY                 INSS421               1 D
DWIGHT               INSS300               2 B
DWIGHT               INSS300               2 C
KEEN                 FIN300                1 A
KEEN                 FIN300                1 B
KEEN                 INSS300               2 B
KEEN                 INSS300               2 C
KEEN                 INSS422               3 C

登录控制器,如

<body>
    <div> 
        <h1>Home</h1>
        @Html.RouteLink("R1", "first", new { user="R1"})
        @Html.RouteLink("R2", "second", new { company = "R2" })
    </div>
</body>

RouteConfig

public class LoginController : Controller
   {
       // GET: Login

      [Route("{user}", Name = "first")]
       public ActionResult Index(string user)
       {
           return View();
       }
      [Route("{company}", Name = "second")]
      public ActionResult Index2(string company)
      {
          return View();
      }
   }

我想在主页 R1 R2 上点击它分别路由到正确的操作结果Index和Index2。

但是它会产生波纹误差

  

以下操作方法之间的当前请求不明确:   类型上的System.Web.Mvc.ActionResult索引(System.String)   MVCTest.Controllers.LoginController System.Web.Mvc.ActionResult   MVCTest.Controllers.LoginController类型的Index2(System.String)

我不知道为什么会这样。

2 个答案:

答案 0 :(得分:1)

问题:因为您只在路线中指定了{params},所以请求将发送到www.example.con/params并且程序混淆因为您对此网址有 2个操作,而表示错误的原因。

www.example.con/matrixwebtech // Login/Index/matrixwebtech or Login/Index2/matrixwebtech? 
www.example.con/stackoverflow // Login/Index/stackoverflowor Login/Index2/stackoverflow?

解决方案:如您所见,这两条路线没有区别,我们必须制作一条。

解决,您必须使路线明确name/{params} {params}

public class LoginController : Controller
{
    [Route("{user}", Name = "first")]
    public ActionResult Index(string user)
    {
        return View();
    }
    [Route("company/{company}", Name = "second")]
    public ActionResult Index2(string company)
    {
        return View();
    }
}

现在我们将使用 no confussion

来访问此路线
www.example.con/matrixwebtech // /Login/Index/matrixwebtech
www.example.con/company/stackoverflow // /Login/Index2/stackoverflow

注意:您可以找到有关Route here.

的更多信息

答案 1 :(得分:1)

不使用 {user} {company} ,而是使用用户公司

示例:

PortletRequest