如何在asp,net mvc中使用用户定义的url操作?

时间:2016-10-24 13:50:43

标签: asp.net-mvc routing

我希望为最终用户提供一种方法,让他们输入一个值'SmallBuildingCompany',然后使用这个值来创建一个自定义URL,它将重定向到一个信息视图。例如,www.app.com / SofllBuildingCompany。有人能指出一些信息来帮助解决这个问题吗?

编辑161024 到目前为止我的尝试:

我在RouteConfig中添加了这个。

        RouteTable.Routes.MapRoute(
        "Organization",
        "O/{uniqueCompanyName}",
        new { controller = "Organization", action = "Info" }

并在组织控制器下添加了一个新的控制器方法和视图。

public async Task<ActionResult> Info(string uniqueCompanyName)
{
    var Org = db.Organizations.Where(u => u.uniqueCompanyName == uniqueCompanyName).FirstOrDefault();

    Organization organization = await db.Organizations.FindAsync(Org.OrgId);

    return View("Info");
}

1 个答案:

答案 0 :(得分:0)

您可以使用URL的SmallBuildingCompany部分作为用于显示每个信息视图的操作的参数来实现此目的。

在Global.asax.cs中设置Route以将公司名称提取为参数并将其传递给CompanyInfoController的Index操作:

protected void Application_Start() {
   // Sample URL: /SmallBuildingCompany
   RouteTable.Routes.MapRoute(
        "CompanyInfo",
        "{uniqueCompanyName}",
        new { controller = "CompanyInfo", action = "Index" }
   );
}

请注意,此路线可能会破坏默认路线({controller}/{action}/{id}),因此您可能希望在信息中添加前缀&#34;信息&#34;路线:

protected void Application_Start() {
       // Sample URL: Info/SmallBuildingCompany
       RouteTable.Routes.MapRoute(
            "CompanyInfo",
            "Info/{uniqueCompanyName}",
            new { controller = "CompanyInfo", action = "Index" }
       );
    }

然后,CompanyInfoController Index操作可以使用uniqueCompanyName参数从数据库中检索信息。

public ActionResult Index(string uniqueCompanyName) {
    var company = dbContext.Companies.Single(c => c.UniqueName == uniqueCompanyName);
    var infoViewModel = new CompanyInfoViewModel {  
        UniqueName = company.UniqueName  
    }
    return View("Index", infoViewModel);
}

ASP.NET Routing