2013-03-21 38 views
0

我想設置以下網址在我MVC4網站,在網址中使用用戶的全名:MVC用戶的全名,如何處理重複

http://www.myapp.com/profile/steve-jones 

我已經安裝在全球下列路線的.asax:

routeCollection.MapRoute(
     "profile", "profile/{userName}", 
     new { controller = "myController", action = "profile", userName = string.Empty 
    }); 

我可以把參數'steve-jones'和它匹配與匹配名稱的用戶。我唯一的問題是,如果有多個'Steve Jones',我該如何處理?

有誰知道這個解決方法/解決方案,以便我可以使用用戶的全名作爲URL的一部分,仍然能夠檢索控制器方法中的正確用戶?

我是不是強迫用URL包含用戶的id(我不想出現的東西)?

回答

2

處理此問題的常用方法是在創建配置文件時附加一個數字。因此,如果「steve-jones」已經是數據庫中的一個名稱,則使用戶的顯示名稱爲「steve-jones2」。您基本上必須堅持所有個人資料網址都是唯一的,其中包括更新任何現有數據庫和帳戶創建代碼。替代地(和/或另外地),如果找到兩個相同的名字,則使腳本重新路由到消歧頁面,其中向用戶呈現許多現有史蒂夫·雅可塞斯的檔案信息的鏈接和摘錄,以便他們可以去完整的正確配置文件。

處理它的另一種方法是在所有用戶配置文件末尾添加一個附加的數字代碼。在我的大學裏,所有的登錄都是基於名字的,所以他們給每個僞隨機的3位數的擴展名,這樣他們就安全了,只要他們不會得到1000個確切同名的人。:)

有些人可能如果沒有史蒂夫·瓊斯或者史蒂夫·瓊斯,如果你擔心的話,可以更幸福地成爲史蒂夫·瓊斯 - 342。

+0

感謝Brian,非常有幫助。唯一的問題是,沒有用戶名只是姓和名,我沒有訪問數據庫,它正在處理CRM – DevDave 2013-03-21 16:53:32

+1

我明白了,那麼你必須在飛行中做到這一點。也許如果有帳戶創建日期,您可以按照這種方式進行排序並以這種方式分配數字 - 所以第一個史蒂夫總是會是史蒂夫1等等。這樣,您可以擁有一個有效的元變量,而無需更改數據庫對於。 – BrianHall 2013-03-21 17:03:03

+0

不錯的主意,可能會嘗試靠近它,謝謝 – DevDave 2013-03-21 17:06:55