В итоге вы получите нужный URL-адрес, сохраненный в «id» элемента «div». Это кажется разумным решением, если вы выполняете действия только для чтения.

м текущем проекте, использующем asp.net MVC 3 (используя бритву), когда я делаю Ajax-вызовы, я должен держать JS на странице просмотра, потому что я хочу использовать Url.Action для генерации URL. Это означает, что я не могу разбить код js на файлы .JS. Есть ли лучшее решение, чем то, что я сейчас делаю.

 jim tollan24 янв. 2011 г., 13:16
Саймон, я недавно ответил на этот вопрос, но на самом деле нашел, что принятый ответ - гораздо более точное решение. посмотрите здесь для простого решения вашей проблемы:stackoverflow.com/questions/4624626/... ура ..

Ответы на вопрос(4)

Решение Вопроса

как и выше, с немного другим поворотом, так как мне нравится пространство имен в моем javascript.

Файл javascript выглядит примерно так:

var my = {};

my.viewname = 
{
   init : function(settings){
      // do some work here. settings.someImportantUrl has my json/ajax url eg.
      alert(settings.someImportantUrl );
   }
}

Тогда мой взгляд будет содержать что-то вроде:

<script language='javascript'>
  // allocate an object with variables you want to use in the external js file
  var settings = {someImportantUrl: '<%=Url.Action(...)%>'};
  // call an init method for the current view
  my.viewname.init(settings);
</script>
 Jamiec24 янв. 2011 г., 17:29
@jim, спасибо, что заметили мое упущение.
 Jamiec24 янв. 2011 г., 15:40
@ Симон - в пределахinit Метод, вы можете использовать settings.whither для доступа к переменным, которые вы выделили в представлении для объекта настроек. перечитайте пример, должно быть понятно.
 Jamiec24 янв. 2011 г., 18:19
@Simon - то же самое, что пространства имен приносят в любое программирование; организация, ясность и хорошая практика.
 jim tollan24 янв. 2011 г., 17:18
Джейми, просто чтобы добавить, вы бы, конечно, добавилиvar my = {}; в ваш начальный раздел файла JavaScript :-)
 Simon24 янв. 2011 г., 14:25
Итак, jamiec, чтобы снова извлечь URL из JS, я просто использую нотацию объекта JS, например, var url = my.namespace.settings.UserEditUrl, это правильно?

но другой способ сделать это - использовать @ Url.Action для установки 'id' разметки html, затем вы можете создать функцию щелчка JavaScript, как показано ниже:

Посмотреть

<div class="someClickable" id='@Url.Action("Action", "Controller")'>
</div>

Ссылочный файл JavaScript

$(function() {
    $('someClickable').click(function () {
        $.ajax({
            url: this.id,
            success: someJSFunction,
            dataType: "html"
        });
    });
});

В итоге вы получите нужный URL-адрес, сохраненный в «id» элемента «div». Это кажется разумным решением, если вы выполняете действия только для чтения.

можете использовать глобальные переменные, чтобы связать ваше представление и JavaScript. Например. Просмотр страницы выглядит ниже.

view html ...
<script type="text/javascript">
var pageUrl = @GetURL()
</script>

<script type="text/javascript" src="/js/script.js"/>

script.js использовать файлpageUrl переменные и другие глобальные переменные.

 Simon24 янв. 2011 г., 14:23
ну ладно, Адил, твое предложение похоже на ответ Egor4eg ниже.
 Adeel24 янв. 2011 г., 13:14
@ Симон нет, вам не нужно жестко кодировать путь внутри js из-за глобальных переменных, определенных в вашем представлении, сгенерированных MVC
 Simon24 янв. 2011 г., 12:59
но мне все еще нужно жестко кодировать путь URL внутри файла JS, и я не хочу этого делать, я хочу, чтобы MVC создал URL для меня.

код JavaScript в файлах .js.

В моем приложении MVC.NET 1 есть код из вида:

<script type="text/javascript" src="<%=Url.Content("~/Scripts/Account/ManageUsers.js")%>"></script>

<script type="text/javascript" src="<%=Url.Content("~/Scripts/Account/ManageUsersAndGroups.js")%>"></script>

<script type="text/javascript">

    var getUsersUrl = '<%= Url.Action("GetUsers", "Account") %>';
    var getUserDetailsURL = '<%= Url.Action("GetUserDetails", "Account") %>';

    <%If Not ViewData("readOnly") Then%>
    var changeRolePermissionsUrl = '<%= Url.Action("ChangeRolePermissions", "Account") %>';
    var deleteUserUrl = '<%= Url.Action("DeleteUser", "Account") %>';
    var resetPasswordUrl = '<%= Url.Action("ResetPassword", "Account") %>';
    var updateUserGroupsUrl = '<%= Url.Action("UpdateUserGroups", "Account") %>';
    var updateUserDetailsUrl = '<%= Url.Action("UpdateUserDetails", "Account") %>';
    <%End If%>  
</script>

Таким образом, вы даже можете не отображать URL-адреса для действий, которые не могут быть вызваны пользователем по соображениям безопасности. (ViewData("readOnly") означает, что пользователь имеет доступ только для чтения к экрану).

И есть часть кода в js-файле:

function GetUsersList() {
    ajax.getJSON(getUsersUrl, {}, function(data) {
        if (data != false) {
            ShowUsers(data);
        }
        else {
            jAlert('Error during users list retrieving.');
        }
    });
}

гдеgetUsersUrl определяется в представлении

 Rajan Mishra28 февр. 2017 г., 13:51
Это лучшее решение, которое я получаю. Спасибо @ Egor4eg
 Egor4eg24 янв. 2011 г., 13:37
Я не вижу лучшего пути. Но я могу сказать, что моя практика хороша. Он используется в большом проекте около 1,5 года, и у нас нет проблем в разработке и обслуживании.
 Simon24 янв. 2011 г., 13:02
Я размышлял в том же духе, то есть сохраняя коллекцию всех моих URL-адресов Ajax в общем ASCX и поддерживая это, я просто хочу убедиться, что я не пропускаю что-то еще, что могло бы быть проще

Ваш ответ на вопрос