Я ищу наиболее эффективный / стандартный способ передачи данных между клиентским кодом JavaScript и кодом C # в приложении ASP.NET. Я использовал следующие методы для достижения этой цели, но все они чувствуют себя немного выдумкой.
Чтобы передать данные из JavaScript в код C #, нужно установить скрытые переменные ASP и запустить обратную передачу:
<asp:HiddenField ID="RandomList" runat="server" />
function SetDataField(data) {
document.getElementById('<%=RandomList.ClientID%>').value = data;
}
Затем в коде C # я собираю список:
protected void GetData(object sender, EventArgs e)
{
var _list = RandomList.value;
}
Возвращаясь к другому пути, я часто использую ScriptManager для регистрации функции и передачи ей данных во время Page_Load:
ScriptManager.RegisterStartupScript(this.GetType(), "Set","get("Test();",true);
или я добавляю атрибуты к элементам управления перед публикацией или на этапах инициализации или предварительного рендеринга:
Btn.Attributes.Add("onclick", "DisplayMessage("Hello");");
Эти методы хорошо послужили мне и делают свою работу, но они просто не чувствуют себя законченными. Существует ли более стандартный способ передачи данных между клиентским JavaScript и внутренним кодом C #?
Я видел некоторые сообщения , как этот , которые описывают HTMLElement класса; это то, что я должен посмотреть?
источник
Ответы:
Вы можете просто и легко вызвать метод статической страницы из JavaScript, как в этом примере . Если вам нужно вызвать метод с нескольких страниц, вы можете настроить веб-сервис и вызвать его из Javascript таким же образом. Пример также включен ниже.
.aspx код
Код за кодом
Код JavaScript
ПРИМЕЧАНИЕ. Методы страницы должны быть статическими. Это может быть проблематично для вас, в зависимости от того, что пытается сделать приложение. Однако, если информация вообще основана на сеансе, и вы используете какую-то встроенную аутентификацию, вы можете поместить атрибут EnableSession в декоратор WebMethod, и это позволит вам получить доступ к HttpContext.Current.User, Сессия и т. Д.
источник
Я бы порекомендовал взглянуть на jQuery. JQuery может использоваться для выполнения обратных вызовов AJAX на сервер, который может передавать данные в любом нужном формате - хорошим форматом может быть JSON, поскольку он может использоваться непосредственно в javascript.
Чтобы получить данные с сервера в javascript с помощью jQuery , следующие выборки делают асинхронный запрос к http://youserver.com/my/uri и получают данные с сервера в предоставленной функции.
Отправка данных из javascript на сервер работает аналогично:
источник
Microsoft внедрила
UpdatePanel
контроль над Ajax, так что это, пожалуй, «стандартный» способ. Я лично не рекомендовал бы использовать его, хотя он не имеет ничего общего с богатым набором функций и контроля, который вы имеете при непосредственном использовании JavaScript.Вот как я лично это делаю:
Создайте скрытые поля для любых значений на стороне клиента, которые вы хотите использовать при стандартной обратной передаче страницы (т. Е. Когда пользователь нажимает "Отправить")
В коде позади зарегистрируйте элементы управления, которые вы хотите использовать на стороне клиента.
Используйте библиотеку javascript * для публикации / получения ajax, а затем используйте JavaScript для обновления страницы на основе ответа
Напишите отдельную страницу «ajax», которая переопределяет метод рендеринга для выполнения работы.
* Есть много библиотек на выбор, вы даже можете свернуть свои собственные. Я бы порекомендовал jQuery , он стабильный и имеет обширный набор функций.
источник
JSON - лучший практический способ выполнить задачу. Не смотрите на проблему как на переход между «C # и JavaScript». Такое мышление приводит к странностям кода, таким как то, что есть в оригинальном посте.
В более общем смысле, это просто передача объектов между клиентом и сервером независимо от языка. JSON отлично подходит для этой задачи, потому что он широко поддерживается и легко читается.
источник
Чтобы установить тег ввода, который не требует asp на стороне сервера, вы можете использовать: (или <% #%> для привязки данных формы)
HTML:
управление asp:
чтобы получить значения при обратной передаче
Если его, asp контролировать скрытый ввод, вы можете использовать
Отличная часть запроса Request.Form - если у вас есть несколько тегов с одинаковым атрибутом «name», результат будет возвращен в CSV.
источник