我正在尝试允许网站上的用户指定并更改自己唯一的虚荣网址。
我将把选择的url存储在数据库中,我想调用它来重新路由到用户。
截至目前,这就是我所拥有的,但我不确定从何处开始。
routes.MapRoute(
"User", // Route name
"User/Profile/{id}", // URL with parameters
new { controller = "User", action = "Profile", id = UrlParameter.Optional }, // Parameter defaults
new string[] { typeof(MvcApplication).Namespace + ".Controllers" }
);
我有什么方法可以接受虚荣网址并将其重新路由到PersonID吗?
我还试图操纵ActionResult来处理字符串Vanity Url或int PersonID,但这似乎没有朝正确的方向发展,所以我回到了routes.Maproute。
编辑:
我希望用户能够输入
http://localhost:60619/User/Profile/Vanity
并且他们将会像进入
一样进入同一个地方http://localhost:60619/User/Profile/224 Assuming the PersonID is 224
的ActionResult:
public ActionResult Profile(int ID)
{
ppUser viewerChoice = DB.ppUser_GetUserByPersonID(ID);
return View(ID);
}
答案 0 :(得分:0)
所以答案是虚荣URL不会根据URL重新路由到每个用户的单独视图。
相反,虚荣URL会将所有用户路由到同一视图,视图内容将根据虚荣URL的值进行更改。在这种情况下,虚荣URL的工作方式与数据库ID完全相同。
例如:
所有人都会路由相同的视图。
因此控制器内的代码将加载基于Mike,Steve,Peter等的内容
这相当于根据个人资料ID 24,56,88等加载内容
您必须保证虚荣网址是唯一的,就像个人资料ID
一样以下是有关如何创建表格的示例:
USE [mydb]
GO
/****** Object: Table [dbo].[Vanity] Script Date: 05/30/2012 13:53:57 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Vanity](
[ProfileID] [int] NOT NULL,
[VanityURL] [nvarchar](50) NOT NULL,
[UserName] [nvarchar](50) NULL,
[Password] [nvarchar](50) NULL,
CONSTRAINT [PK_Vanity] PRIMARY KEY CLUSTERED
(
[ProfileID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
USE [mydb]
/****** Object: Index [IX_Vanity] Script Date: 05/30/2012 13:53:57 ******/
CREATE UNIQUE NONCLUSTERED INDEX [IX_Vanity] ON [dbo].[Vanity]
(
[VanityURL] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO
ALTER TABLE [dbo].[Vanity] WITH CHECK ADD CONSTRAINT [FK_Vanity_Vanity] FOREIGN KEY([ProfileID])
REFERENCES [dbo].[Vanity] ([ProfileID])
GO
ALTER TABLE [dbo].[Vanity] CHECK CONSTRAINT [FK_Vanity_Vanity]
GO
答案 1 :(得分:0)
你可以使用这样的东西,它对我有用,通过使用下面的代码,你可以在一个域上放置两个不同的页面,只需区分那里
protected void Application_Start(object sender, EventArgs e)
{
RegisterRoutes(RouteTable.Routes);
}
public static void RegisterRoutes(RouteCollection routeCollection)
{
routeCollection.MapPageRoute("RouteForCustomer", "{Id}", "~/User.aspx");
routeCollection.MapPageRoute("RouteForCustomer", "Home", "~/Default.aspx");
}