#c# #javascript #asp.net
#c# #javascript #asp.net
Вопрос:
Как я могу присвоить значение переменной javasctipt из code-behind (C #)?
<script type="text/javascript">
String.prototype.trim = function () { return this.replace(/^s |s $/, ''); };
function ConstantByCode(_Obj, _Div) {
var pl = new SOAPClientParameters();
_Obj.value = _Obj.value.trim();
pl.add("Code", _Obj.value);
pl.add("Group", _Obj.Grp);
alert(_Obj.Grp);
var _Value = SOAPClient.invoke("ConstantWS.asmx", "GetConstantByCode", pl, false, CallBackEvent);
if (_Value == null || _Obj.value == "" || _Obj.value == null || IsNumeric(_Obj.value) == false) {
_Obj.value = "";
_Div.innerHTML = "";
}
else {
_Div.innerHTML = _Value;
}
}
function CallBackEvent(r) {
}
function IsNumeric(input) {
return (input - 0) == input amp;amp; input.length > 0;
}
BehindCode
txtCode.Attributes.Add("Grp", Me.ConstValue)
txtCode.Attributes.Add("onchange", "ConstantByCode(this," amp; DivTitle.ClientID amp; ");")
txtCode.Attributes.Add("onkeyup", "ConstantByCode(this," amp; DivTitle.ClientID amp; ");")
_obj.Grp теперь имеет значение.
предупреждение гласит: не определено
Комментарии:
1. Какую ошибку вы получаете?
2. вместо
String.prototype.trim = function () { return this.replace(/^s |s $/, ''); };
вы можете использовать это:$.trim(value)
3. @Javad_Amiry Спасибо, но в этом случае мне пришлось использовать чистый JavaScript.
Ответ №1:
Я вижу, что вы хотите получить значение Grp, которое является пользовательским атрибутом. Вам нужно использовать функцию getAttribute — поэтому вместо _Obj.Grp
вам нужно использовать _Obj.getAttribute("Grp")
.
Кроме того, я вижу, что вы не заключаете идентификатор клиента в кавычки из ode-behind. Поэтому вместо
txtCode.Attributes.Add("onchange", "ConstantByCode(this," amp; DivTitle.ClientID amp; ");")
вам нужно сказать
txtCode.Attributes.Add("onchange", "ConstantByCode(this,'" amp; DivTitle.ClientID amp; "');")
Обратите внимание на одинарную кавычку (‘) вокруг идентификатора клиента.
Кроме того, js-функция ConstantByCode, похоже, принимает элемент div. Следовательно, вам нужно добавить к ней строку для преобразования идентификатора клиента в фактический DOM. т.е.
function ConstantByCode(_Obj, _Div) {
_Div = document.getElementById(_Div);
.... // rest of the code
Ответ №2:
Во-первых, вам нужно будет иметь доступ к значению на клиенте. Мы можем сделать это, сохранив значение в скрытом поле или добавив атрибут к элементу управления. Похоже, вы хотите сделать это с помощью атрибута, поэтому давайте сначала сделаем это.
добавьте следующее в ваш метод page_load, чтобы у нас был доступ к значению C # на клиенте.
защищенная пустая страница_load(отправитель объекта, EventArgs e) { требуемая строка JsValue = «поместите сюда свое значение»; txtCode.Атрибуты.Добавить(«CSCodeAttribute», требуемое значение); }
Затем нам нужно получить доступ к этому значению через Javascript. Сначала нам нужно будет получить идентификатор клиента элемента управления, поскольку C # установит это значение. Примечание. Я использую Jquery для извлечения идентификатора элемента управления. Это не обязательно, однако я предпочитаю это. Jquery является фреймворком для javascript и может быть загружен с www.jquery.com
функция GetCSAttributeValue() { var csControlID = $(‘#<%= txtUOMCost.ClientID %>’); //Получает имя элемента управления. требуется значение var = csControlID .attr(«CSCodeAttribute»); //Значение, сохраненное в переменной. }
Ответ №3:
Я не уверен на 100%, но думаю, вам понадобится обходной путь, чтобы заставить это работать. Потому что логически в серверной части переменная javascript даже не существует. Вероятно, вы можете создать скрытое поле и сделать его связующим звеном между переменной javascript и лежащим в ее основе кодом. Проверьте это: http://forums.devx.com/showthread.php?t=164356
Попробуйте следующее: 1. Добавьте скрытое поле на свою страницу .aspx:
<asp:HiddenField ID="hidden" runat="server" />
2. Измените значение этого поля в вашем коде-за:
protected void Page_Load(object sender, EventArgs e)
{
hidden.Value = "hello";
}
3. Напишите следующий скрипт для доступа к значению и поместите его в любую переменную:
<script type="text/javascript">
if (document.getElementById("MainContent_hidden") != undefined) {
var hiddenVal = document.getElementById("MainContent_hidden").value;
}
else {
var hiddenVal = null;
}
</script>
ВНИМАНИЕ: третья часть сложна. Мы не используем тот же идентификатор, который мы указали на 1-м шаге, когда вызываем функцию getElementById. Это потому, что asp.net это меняет ситуацию, и временным обходным решением является однократный запуск страницы и просмотр ее исходного кода. Проверьте идентификатор скрытого поля и введите его на шаге 3 внутри функции getElementById. Вы можете поискать лучшие альтернативы, но пока используйте это, если хотите. Если вас поразит шаг 3, дайте мне знать.
Комментарии:
1. Ypu не должен жестко кодировать ClientID элемента управления. Используйте
<%=hidden.ClientID %>
вместо этого…var hiddenVal = document.getElementById("<%=hidden.ClientID %>").value;
2. Пробовал это, но не получилось. @shaahin вы можете попробовать код @Carlos, если это сработает, то это потрясающе.
Ответ №4:
Я не понимаю, как ваш вопрос связан с кодом…
Но установить значение значения javascript со стороны сервера… ну, вы не можете, потому что серверный код выполняется точно на сервере и задолго до того, как HTML отправляется клиенту и javascript выполняется.
Но что вы можете сделать, так это заставить ваш серверный код генерировать фрагмент javascript, который содержит ваше значение.
<script type="text/javascript">
var x = <%= ServerSideMethod() %>;
</script>
Комментарии:
1. у меня есть 3 объекта из моего пользовательского элемента управления, и их переменные не совпадают.