我希望为最终用户提供一种方法,让他们输入一个值'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");
}
答案 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);
}