我正在寫使用ASP.NET MVC與JSON.NET作爲服務器,發送JSON到由讀取客戶端的應用程序淘汰賽,然後顯示數據綁定。這一切都工作奇妙,除了一個問題:添加ASP.NET MVC路由的網址,查看模型對象(在JSON使用)
我有一個類Customer
這是用來生成一個ReviewAuthorViewModel
類 - 後者專門用於JSON序列化,並刪除不必要的字段,循環引用等。在客戶端,我想呈現一個鏈接到客戶的個人資料頁面,URL來自定義的MVC路由「user/{username}」。因爲我是通過JSON發送的,所以我沒有.cshtml
頁面,我可以在其中撥打Url.Action
。
現在的問題是:對於一個任意的對象,我怎樣才能最有效地/優雅地獲得一個數據行爲的URL,沒有.cshtml視圖?
我寧願不要求每個動作額外的代碼的解決方案,但可能是除了在JavaScript中重新創建路由表中的客戶端的唯一選擇。以下是我已經嘗試過的事情,以及每個事情都不令人滿意。
解嘗試1
調用UrlHelper.Action
方法在ReviewAuthorViewModel
類。但是,UrlHelper
需要請求上下文。爲了分離問題,我不希望我的視圖模型對System.Web.Routing
有依賴性,也不希望它需要請求上下文來運行。
解嘗試2
創建類RouteInformation
與成員控制器,動作,和數據,並與兩個屬性的接口IUrlViewModel
,RouteInformation
類型和命名Url
一個獲取/設置字符串的一個get。需要鏈接的視圖模型然後實現此界面,並且控制器查找IUrlViewModel
類型的視圖模型,並使用來自視圖模型的RouteInformation
實例的信息運行UrlHelper.Action
,將結果存儲在Url屬性中。
這一個作品但沒有反射我不知道如何找到在其他視圖模型中實現IUrlViewModel
視圖模型,它感覺非常kludgy。
你有什麼建議有基本上是我做的解決方案2,抽象爲一個接口,使之更容易被重用。但是,這使得很難獲得應該添加URL的嵌套視圖模型對象,並且必須將其添加到每個動作,這似乎是引入難以捉摸的錯誤的好方法。 – ehdv 2012-02-23 17:07:19
我覺得第二個解決方案太複雜,過度設計。 – archil 2012-02-23 17:14:20