2011-10-19 103 views
0

我需要路由信息爲我的JavaScript邏輯在客戶端上。我現在有一個可行的解決方案,但它感覺有點笨拙。我在頁面上注入一個隱藏字段。我認爲必須有更好的方法。這是我目前正在做的:客戶端需要MVC路由信息?

<input type="hidden" id="rt" value="@string.Format("{0}://{1}{2}",Request.Url.Scheme,Request.Url.Authority,Url.Content("~"))"/> 

回答

1

是的,非常笨重。其實你不需要絕對的網址爲你的JavaScript。它可以與相關網址合作。例如:

@Html.Hidden("rt", Url.Content("~/")) 

現在是否使用隱藏字段是好事還是壞事就是,雖然不知道你的情況,並正是你正在嘗試在JavaScript做更多細節的話。但讓我們考慮一個非常常見的情況。你想AJAX化一個表單。在這種情況下,你可以使用HTML傭工在視圖中生成表格,然後:

$(function() { 
    $('#myform').submit(function() { 
     $.ajax({ 
      url: this.action, 
      type: this.method, 
      data: $(this).serialize(), 
      success: function(result) { 
       // TODO: do something with the results 
      } 
     }); 
     return false; 
    }); 
}); 

查看如何,我們不再需要任何硬編碼的網址或隱藏字段脫穎而出的JavaScript。

或者讓我們考慮另一種情況。你想AJAX化一個錨點。一樣。您可以使用Html.ActionLink生成你的錨,然後:

$(function() { 
    $('#mylink').click(function() { 
     $.get(this.href, function(result) { 
      // TODO: do something with the results 
     }); 
     return false; 
    }); 
}); 

或者另一種情形。你有一些div容器,你想在點擊它的時候發送一個AJAX請求給一些控制器動作。在這種情況下,你可以使用HTML5數據 - *屬性上的div:

<div id="mydiv" data-url="@Url.Action("Foo", "Home")">Some contents</div> 

然後:

$(function() { 
    $('#mydiv').click(function() { 
     $.get($(this).data('url'), function(result) { 
      // TODO: do something with the results 
     }); 
     return false; 
    }); 
}); 

OK,現在你看,你不再需要的隱藏字段。總有可能做得更好。

+0

感謝Darin的回覆。儘管我試圖消除隱藏的領域。在頁面上注入隱藏字段是唯一的方法? – coding4fun

+0

@ user127954,不,你不需要隱藏字段。有更好的方法。這將取決於您在客戶端嘗試做什麼。 –

+0

非常多我只是在我的JavaScript的基地網址使用它,所以當它改變我不必改變我的JavaScript(不想硬代碼網址)。 – coding4fun