Лучшие практики - установите свойство jQuery из Code-Behind - PullRequest
4 голосов
/ 23 января 2009

Мне нужно установить одно свойство в команде jQuery, используя значение, которое вычисляется в коде. Моя первоначальная мысль была просто использовать <%= %> для доступа к нему следующим образом:

.aspx

<script type="text/javascript" language="javascript">
$('.sparklines').sparkline('html', {
    fillColor: 'transparent',
    normalRangeMin: '0',
    normalRangeMax: <%= NormalRangeMax() %>
});
</script>

.aspx.cs

protected string NormalRangeMax() {
    // Calculate the value.
}

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

Одной из альтернатив может быть создание всего блока <script> в коде с использованием clientScriptManager.RegisterClientScriptBlock. Но я действительно не люблю помещать целые куски JavaScript в код позади, так как это, ну, в общем, JavaScript.

Может быть, если у меня будет много таких методов, я могу просто поместить их в частичный класс, чтобы они хотя бы физически были отделены от остального кода.

Какой метод вы бы порекомендовали как легкий для понимания и простого в обслуживании?

Ответы [ 4 ]

4 голосов
/ 23 января 2009

<%%> работает нормально. Одна вещь, которую я делаю, это устанавливает значение в скрытом поле на странице (затем пишу необходимый javascript для извлечения этого значения), это хорошо, потому что я могу изменить это скрытое поле с помощью javascript и когда / если страница отправляет обратно, я могу также получить это новое значение из кода.

Если вам нужно вызвать метод по требованию, вы можете выполнить jQuery AJAX-вызов к ASP.NET WebMethod, чтобы получить данные и повторно заполнить различные параметры. Вы можете найти хороший учебник о том, как это сделать, здесь: http://encosia.com/2008/05/29/using-jquery-to-directly-call-aspnet-ajax-page-methods/

Ниже приведен пример кода с использованием метода скрытого поля (с использованием элемента управления datepicker, но вы поймете идею):

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication1._Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
        <div>
            <asp:TextBox ID="txtCalendar" runat="server" />
            <asp:HiddenField ID="hfTest" runat="server" />
        </div>
    </form>

    <script type="text/javascript" src="http://code.jquery.com/jquery-latest.js"></script>

    <script type="text/javascript" src="http://ui.jquery.com/latest/ui/ui.datepicker.js"></script>

    <script type="text/javascript">
    var dateMinimum = new Date($("#<%= hfTest.ClientID %>").val());

    $(function() {
        $("#<%= txtCalendar.ClientID %>")
            .datepicker({
                minDate: dateMinimum
            });
    });
    </script>
</body>

И код метода Page_Load:

protected void Page_Load(object sender, EventArgs e)
{
    // Set Value of Hidden Field to the first day of the current month.
    this.hfTest.Value = new DateTime(DateTime.Today.Year, DateTime.Today.Month, 1).ToString("MM/dd/yyyy");
}
1 голос
/ 23 января 2009

Я столкнулся с этой проблемой некоторое время назад. Я рекомендую <%%> для одной переменной вещи. Я считаю, что функция RegisterClientScriptBlock полезна только в том случае, если мне когда-нибудь понадобится код, чтобы определить, какие сценарии нужно запускать.

1 голос
/ 23 января 2009

Лично я бы использовал метод <%%>. Это то, для чего предназначен вид. Мне не нравится RegisterClientScriptBlock вообще. Если вы когда-нибудь перейдете в MVC, вы привыкнете к <%%> ...:)

0 голосов
/ 23 января 2009

У Рика есть хорошая статья о передаче серверных переменных клиентскому скрипту

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...