Лучший способ не кодировать URL-адреса жестко при использовании ASP.NET MVC с JQuery - PullRequest
5 голосов
/ 15 сентября 2009

Привет, ребята,

Я использую ASP.NET MVC с jquery, и сейчас все идет отлично. Просто есть один вопрос, который беспокоит меня. Как я должен обрабатывать URL в методах jquery? Я действительно не хотел бы жестко кодировать это, как здесь:

 $(function() {  
        $.getJSON("/Home/List", function(data) {  
            var items = "---------------------";  
            $.each(data, function(i, country) {  
                items += "" + country.Text + "";  
            });  
            $("#Countries").html(items);  
        });  

       $("#Countries").change(function() {  
           $.getJSON("/Home/States/List/" + $("#Countries > option:selected").attr("value"), function(data) {  
               var items = "---------------------";  
               $.each(data, function(i, state) {  
                   items += "" + state.Text + "";  
               });  
               $("#States").html(items);  
           });  
       });  
   });  

Настоятельно рекомендуется использовать вспомогательные методы HTML для создания ссылок в MVC, такие как Html.ActionLink, Html.BeginForm, чтобы в случае, если кто-то изменит, что HomeController отображается на MyHome вместо Home, проблем не будет.

Итак, как не жестко закодировать URL, как в примере?

Кроме того, я не хочу использовать ASP.NET Ajax, потому что я согласен с этим ответом asp-net-ajax-vs-jquery-in-asp-net-mvc .

Спасибо

Ответы [ 3 ]

6 голосов
/ 15 сентября 2009

Вы можете определить несколько глобальных переменных JavaScript:

<script type="text/javascript">
    var listUrl = '<%= Url.Action("Index", "Home") %>';
    var statesListUrl = '<%= Url.Action("States", "Home") %>';
</script>

, который позже будет использоваться методами $ .getJSON.

1 голос
/ 15 сентября 2009

Мне часто нужен только текущий контроллер и действие в js. Вот почему я включил это в мою MasterPage.

<script type="text/javascript">
  var controller = '';
  var action = '';
  controller =   '<%= ViewContext.RouteData.GetRequiredString("controller")%>' ;
  action =   '<%= ViewContext.RouteData.GetRequiredString("action")%>' ;
    </script>
1 голос
/ 15 сентября 2009

Действительно простой и прагматичный подход, который я использовал, - поместить что-то вроде этого вверху каждой главной страницы:

<script type="text/javascript">
    var baseUrl = '<%= Url.Resolve("~") %>';
</script>

, а затем включите все ваши файлы javascript, используя baseUrl всякий раз, когда это необходимо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...