2011-09-21 71 views
0

我需要生成用於JavaScript的網址。我不認爲我目前的解決方案是非常可讀的。提高Asp.NET MVC/Javascript網址生成可讀性

//Navigation during load: Id from MVC or hash or zero. 
var m_departmentId = <%= ViewContext.RouteData.Values["id"] ?? 0 %>; 
if(0 == m_departmentId) 
{    
    var hash = location.hash;    
    //Only one hash value 
    var id = parseInt(hash.substring(2)); 

    //If it's a real Id, use it. 
    if (!isNaN(id)) { 
     m_departmentId = id; 

    } 
} 

var gridUrl = '<%= Url.Action("GetEmployees", "Company", new { area = "" }) %>/' + m_departmentId; 

此腳本被放置在我的頁面頂部JavaScript的地方,我將aspnet變量翻譯爲js變量。

我可以擺脫第一個JavaScript嗎?
我可以提高最後一行的可讀性嗎? Imho這是相當可怕的,特別是在我的頁面JavaScript。
其他改進?


改進1:當行動是路由的默認操作,因爲動作是從路徑剝離沒有使用動作參數時,

var gridUrl = '<%= Url.Content("~/Company/GetEmployees/") }) %>' + m_departmentId; 

T4MVC沒有工作。

+0

爲什麼你需要散列? –

+0

@Darin Dimitrov它用於該頁面上的ajax導航(具有深度鏈接)(類似於樹和網格界面的資源管理器)。 –

回答

2

我認爲你需要JavaScript的散列。你不能讀哈希服務器端。

T4MVC可能會幫助您處理「醜陋」的URL生成。它至少會擺脫魔術弦(仍然不能相信他們與UrlHelper一起走過那條路)。

+0

This works: 'var gridUrl ='<%= Url.Action(MVC.Company.GetEmployees())%> /'+ m_departmentId;' 這並不好,但至少按照合理的順序。 –

+0

我也傾向於在這些情況下使用格式字符串。我認爲這增加了可讀性,儘管這可能是過度的。 'String.Format(「{0}/{1}」,Url.Action(MVC.Company.GetEmployees()),m_departmentId);' – JoshNaro

+0

當我稍後需要添加id 。 t4mvc生成的url會刪除/索引,稍後會導致/ Controller/Id而不是/ Controller/Action/Id。 我不得不這樣寫'var m_personUrlTemplate ='<%= Url.Content(「〜/ Person/Index /」)%>'; –