Подтвердить что ты не робот

Рекомендации по передаче данных из asp.net-mvc в javascript

В последнее время я много работал с ASP.NET MVC и Javascript/jQuery, и я, кажется, направляюсь в направлении, где мне всегда нужно передать какое-то динамическое значение "в" мой javascript. Когда script прав на странице, я сделал что-то вроде этого:

var isEditable = <%=ViewData["editable"]%>

Мне нравится, как это быстро и просто и так же, как я бы ввел значение в HTML. Но это пахнет. Действительно, очень плохо. И он разбивает Visual Studio intellisense и форматирование кода, что делает мои скрипты трудными для чтения и понимания.

Мне пришло в голову другое решение - передать мои данные в скрытое поле и иметь ссылку на Javascript, которая...

<input type="hidden" id="editable" value="<%=ViewData["editable"]%>" />
var isEditable = $("#editable").attr("value");

Это, вероятно, намного лучше, поскольку он сохраняет целостность script и позволит мне переместить его во внешний .js файл. Но что-то в этом решении тоже не кажется идеальным. Или это только я?

Можно ли рекомендовать решения и рекомендации по передаче данных в ваши скрипты? Могу ли я возглавить неправильный путь, если мои сценарии в конечном итоге сильно полагаются на viewdata из моих контроллеров?

4b9b3361

Ответ 1

Я иногда передаю данные на свои страницы, записывая объект конфигурации на страницу с помощью сериализатора JSON:

var pageConfig = <%= ServerConfig.ToJson() %>;

Где вам нужно написать метод ToJson самостоятельно. Это позволяет сохранить состояние страницы, так что есть только одно место, где вы вводите значения сервера. Все, что здесь происходит, - это чистый javascript. В вашем примере вы можете сделать следующее:

var isEditable = pageConfig.isEditable;

даже во внешнем js файле, если pageConfig является глобальным. В этом случае, однако, вы должны правильно прописать его: MY_APP.pageConfig возможно.

Ответ 2

Вы собираетесь ввести такую ​​информацию так или иначе. И ИМО, ваш первый пример не сильно отличается от второго.

Другое решение - иметь класс JS (или прототип?), который будет принимать объект опций. Хотя, по общему признанию, это не очень отличается от приведенных вами примеров. Но все же, может быть, вы захотите пойти этим путем.

$(function () {
    myClass.init({ isEditable: <%=ViewData["editable"]%>, 
        another: '<%=ViewData["another"]%>' });
});

Ответ 3

Я думаю, что @çağdaş делает хороший момент, но не забудьте проверить серверную сторону. Если вы установите поле "только для чтения", ничего не помешает пользователю изменить этот флаг, изменив поле только для чтения и отправив.

Ответ 4

Вся деятельность Ajax заключается в том, чтобы загружать информацию асинхронно. Если вы выполняете работу Ajax (загружаете информацию и сохраняете ее в переменной), это отнимает у нее власть. Почему бы вам не попробовать JQuery и использовать его Ajax или Get функции для динамического загрузки контента. Это ускорит загрузку страницы.