Как вызвать метод на стороне клиента из метода asp.net? - PullRequest
0 голосов
/ 20 марта 2009

У меня есть следующий JavaScript:

<script type="text/javascript">
    function showjQueryDialog() {
        $("#dialog").dialog("open");
    }

    $(document).ready(function() {
        $("#dialog").dialog({
           autoOpen: false,
           modal: true,
           buttons: { "Renew Membership": function() { $(this).dialog("close"); } }
        });
    });
</script>

У меня есть кнопка asp: на странице, которая регистрирует пользователя. Вот пример того, что я хочу получить, когда кнопка нажимается на стороне сервера:

protected void LoginButton_OnClick(object sender, EventArgs e)
{
    UserProfile profile = UserProfile.GetUserProfile(txtUserName.Text);

    TimeSpan ts = profile.Expiration.Subtract(DateTime.Now);

    if(ts.Days <= 30)
      //call showJQueryDialog() to open the dialog box
      Page.ClientScript.RegisterStartupScript(typeof(Login2), "showjquery",   
      "showJQueryDialog();", true);
    else
     //log the user in as normal.

}

Также, как бы я прикрепил такой метод, как следующий, к кнопке «Обновить» в диалоге

public void Renew()
{
    Response.Redirect("Renew.aspx");
}

Ответы [ 5 ]

3 голосов
/ 20 марта 2009

Поскольку вызов функции на стороне клиента невозможен, я хотел бы предложить в javascript информацию, необходимую для принятия решения, и заставить все происходить на стороне клиента.

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

3 голосов
/ 20 марта 2009
if(ts.Days <= 30)
    ScriptManager.RegisterStartupScript(
        typeof(MyPage), "showjquery", 
        "$(document).ready(function() { showJQueryDialog(); };", 
        true
    )
else
     //log the user in as normal.

Поместите это в нужное место: // вызовите showJQueryDialog (), чтобы открыть диалоговое окно

Обновление 1: Похоже, вы используете панель обновления, в этом случае вам нужно использовать ScriptManager.RegisterStartupScript

Обновление 2: Вы также хотите заключить вызов js в вызов jquery .ready, чтобы он не запускался до того, как диалоговое окно было настроено. Это лучше, чем подключение к onload тела, потому что onload ожидает загрузки изображений, поэтому .ready будет показываться раньше (в зависимости от загруженных изображений и других битов информации).

1 голос
/ 20 марта 2009

Я действительно не понимаю подход Фредди к этому вообще. Возможно, я что-то неправильно понимаю. На мой взгляд, здесь есть только две возможности, как указывают devdimi. Или:

a) Выполните всю логику в клиентской части onClick javascript. Вы можете вызвать метод AJAX, который выполняет действие в OnClick на стороне сервера, а затем вызвать всплывающее окно jQuery в обратном вызове AJAX.

b) Сделайте обратную передачу, обработайте OnClick на стороне сервера, затем присоедините JavaScript к странице, которая запускается в событии тела onLoad:

body.Attributes.Add ("onLoad", "showJQueryDialog ();")

1 голос
/ 20 марта 2009

Я бы оставил скрытый LinkButton, а затем вызвал бы метод __doPostBack в javascript.

<asp:LinkButton runat="server" ID="Renew" OnClick="Renew_Click" style="display:none" />

JQuery

$(document).ready(function() {
    $("#dialog").dialog({
       autoOpen: false,
       modal: true,
       buttons: { "Renew Membership": function() { 
          $(this).dialog("close"); 
          __doPostBack('Renew', '');
         // or if inside a master page something like this
          __doPostBack('ctl00$ContentPlaceHolder1$Renew', '');
       } }
    });
});
0 голосов
/ 16 октября 2009

У меня похожая проблема с IE8.

Мы используем ASP.NET, и каждый раз, когда мы выполняем Response.Redirect в PageLoad / Control-Events, IE8 устанавливает все базовые объекты DOM на неопределенные (изображение, окно, документ) Но если мы сделаем перенаправление во время события PreInit, то IE8 в порядке .. Прекрасный

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