присвоить значение переменной javascript в C # CodeBehind

#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 объекта из моего пользовательского элемента управления, и их переменные не совпадают.