2011-01-10 2 views
3

я называю яваскрипт функцию из .cs файла, как показано ниже:передать переменный яваскрипт метода из кода за

private string CallValuesScript() 
{ 
    StringBuilder sb = new StringBuilder(); 
    sb.AppendLine("$(document).ready(function() {"); 
    sb.AppendLine("DisplayValues();"); 
    sb.AppendLine(" });"); 
    return sb.ToString(); 
} 

Я два целых числа объявлен на уровне класса частный ИНТ ratingLinkId = 0; private int ratingValue = 0;

Пожалуйста, дайте мне знать, как я могу передать эти два целочисленных значения функции «DisplayValues ​​();» ?

У меня есть Java-функция ASPX, как показано ниже:

function DisplayRatings(id, count) { 
//code 
} 

Благодаря

+0

Вы должны научиться правильной разработке веб-сайтов, прежде чем переходить на «короткие сокращения». Dot.net предоставляет –

+1

. Я думаю, что лучший комментарий будет, не могли бы вы объяснить, почему вы решили сделать это таким образом, а не просто поместить это на страницу aspx ? – Steve

ответ

1

Вы можете использовать

sb.AppendLine("DisplayValues(" + ratingLinkId + "," + ratingValue + ");"); 
1

Вы можете передать серверные переменные в стороне клиента, присоединяя их к вызову метода в вашем помощнике сценария.

sb.AppendLine("DisplayValues(" + ratingLinkId.ToString() + ", " + ratingValue.ToString() + ");") 
0

Одним из способов было бы иметь скрытые поля в aspx, которые содержат значения. Это будет работать только в том случае, если переменные не будут меняться с момента загрузки страницы.

Еще одна вещь, которую вы могли бы сделать - это использовать метод страницы с атрибутом WebMethod/ScriptMethod и называть его вызовом веб-службы из javascript.

Другой метод должен были бы передать переменную в яваскрипте функцию, когда вы строите яваскрипт строки

0

@San, я согласен с Wraith. где-то в вашем коде инициализации (aspx page markup, page_load и т. д.) создают скрытые поля и задают их значения целым числам, которые вы хотите. После этого вам больше не нужно будет создавать js с кодом.

вот очень простой пример, я установил скрытые поля с литералами. Вы можете так же легко оставить значения unset и установить их в некоторый код инициализации на вашей странице .cs.

Добавьте эти строки в .aspx страницы

<asp:HiddenField runat="server" id="hdnfldarg1" Value="1" />
<asp:HiddenField runat="server" id="hdnfldarg2" Value="2" />

Теперь изменить код JS к следующему. Предполагая, что вы используете более новую версию asp.net Microsoft имеет некоторую специальную функцию js $ get, $ find, которая переводит asp.net id в clientid.

$(document).ready(function() { 
var arg1 = $get('<% hdnfldarg1 %>'); 
var arg2 = $get('<% hdnfldarg2 %>'); 
DisplayValues(arg1,arg2);") 
});" 

Конечно, это непроверенный код. Вы можете добавить любой код Page_load/init, чтобы установить точные значения двух скрытых полей. Я не уверен, что это будет работать вообще, если вы попытаетесь использовать отдельный файл js.

1

Вы хотите, чтобы не генерировать JavaScript в codebehind. Мне также лично не нравится встроенные блоки кода в моем javascript. Кроме того, использование скрытых полей в вашем HTML означает, что эти значения будут представлены в форме submit.

Мое решение создать частный внутренний класс в коде со свойствами для всех значений, которые вы будете нуждаться в JavaScript:

class JSValues { 
    public int id { get; set; } 
    public int count { get; set; } 
} 

В коде, сериализуете в формате JSON:

string json = new JavaScriptSerializer().Serialize(new JSValues() { 
    id = 0, 
    count = 0 // or whatever you want to assign them 
}); 

ClientScript.RegisterClientScript(
    this.GetType(), 
    "codeBehindToJS", 
    "var fromCodeBehind = " + json + ";"); 

Наконец, в JavaScript, эти значения могут быть доступны:

DisplayValues(fromCodeBehind.id, fromCodeBehind.count); 

EDIT: Som e исправления, хотя это немного поздно для вечеринки.

1

Решение с помощью $ GET не работает для меня ....

Но вот простой способ сделать это без использования скрытого поля.

В коде позади определить переменную:

Protected maxPhotos As String 

Затем на странице ASPX внутри вашего JavaScript просто захватить его, как так:

var maxPhotos = 0 + "<%=maxPhotos%>"; 

Я сделал «0+», потому что я хотел для принудительного преобразования из строки в число.

Смежные вопросы