Чтение свойства C # в код JQuery - PullRequest
6 голосов
/ 19 августа 2009

Я пытаюсь прочитать значение свойства C # из моего кода за файлом в некоторый скрипт JQuery (см. Ниже). Селектор JQuery, который я написал, обращается к ASP.Net GridView, а затем к полю CheckBox в виде сетки. Всякий раз, когда флажок установлен или не отмечен, устанавливается код, но мне нужно получить доступ к свойству C # из кода, чтобы выполнить соответствующее действие на основе значения свойства.

    $(".AspNet-GridView-Normal > td > input").click(function() {

        //Need to access the C# property here

        //Take action here based on the value of the C# property

     });

Ответы [ 7 ]

12 голосов
/ 19 августа 2009

Это может указывать на очевидное, но не существует кода на стороне клиента, где выполняется код jQuery. Что вы можете сделать, это присвоить значение свойства скрытому полю на стороне сервера, чтобы при необходимости проверить его с помощью jQuery на стороне клиента, оно было доступно. Таким образом, вы могли бы сделать следующее на стороне клиента.

Markup:

<asp:HiddenField ID="hfValueINeedToKnow" runat="server"/>

Код сзади:

hfValueINeedToKnow.Value = <some value>;

JQuery:

$("#<%= hfValueINeedToKnow.ClientID %>").val();

Возможно, вам потребуется внести некоторые незначительные изменения, чтобы поддержать значение для каждой строки сетки, но, надеюсь, это объясняет общую идею.

2 голосов
/ 19 августа 2009

Вы упомянули в комментарии, что значением является int. И я вижу, что это также свойство public в вашем коде. Теперь это тривиально - вам не нужно избегать значения или обращаться к нему каким-либо обходным путем, и вы получаете безопасность типов бесплатно:

<script>
$(".AspNet-GridView-Normal > td > input").click(function() {

    var AvailableInstalls = <%= AvailableInstalls %>;

});
</script>
1 голос
/ 19 августа 2009

Ну, вы не можете.

Вам необходимо отобразить свойство C # в некотором элементе (возможно, в скрытом поле), а затем посмотреть на него таким образом.

Но объясните дальше: какое свойство вы пытаетесь проверить?

0 голосов
/ 19 августа 2009

Если вы поместите свое значение в asp: HiddenField с идентификатором hfValueINeedToKnow, самый простой способ получить это значение на стороне клиента -

var jsvar = $("[id$=hfValueINeedToKnow]").val();

Таким образом, вы также можете поместить этот код в отдельный файл .js.

0 голосов
/ 19 августа 2009

ASP, встроенный в JavaScript, всегда нервирует меня с точки зрения атак с использованием инъекций скриптов и невозможности модульного тестирования вашего JavaScript.

Это основано на более легком ответе:

<script type="text/javascript">
$(".AspNet-GridView-Normal > td > input").click(function() {

    var AvailableInstalls = $("#MyHidden").val();

});
</script>

Вы можете переместить его в скрытую переменную:

<input type="hidden" id="#MyHidden" value="<%= AvailableInstalls %>" />

Однако это не решает проблему инъекций. Таким образом, вы могли бы добавить скрытую переменную на стороне сервера и установить ее из функции события Page_Load в ASP.NET.

(P.s. Вам также нужен атрибут type = "text / javascript" в теге сценария, чтобы сделать его действительным HTML).

0 голосов
/ 19 августа 2009

Нет действительно чистого способа сделать это. Лучше всего будет использовать функциональность ClientScript.RegisterClientScriptBlock, встроенную в ASP.NET. Вот хороший учебник для начинающих .

private int myValue;

protected void Page_Load(object sender, EventArgs e) {
    ClientScript.RegisterClientScriptBlock(typeof(Page), 
        "vars", "<script>var myParams = { p1: " + myValue + ", p2: 'My Name' };</script>");
}

Это поставит поставляемый скрипт на вашу страницу в верхней части формы. Вы тоже можете это изменить. Очевидно, это не самая красивая; по сути, вы объединяете строки в другом языке, но это будет работать, и для простого объявления переменных это не слишком сложно для глаз.

0 голосов
/ 19 августа 2009

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

<%
    var messsge = "Hello World!"
%>

<html>
<head>
<script type="text/javascript">
    function ShowMessage()
    {
        var msg = '<%= message %>';
        if(msg)
            alert(msg);
    }
</script>
</head>
</html>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...