1

Web アプリケーションでは、いくつかの条件ロジックを実行し、それに基づいてダイアログ ボックスを表示する必要があります。これが私がする必要があることです:

  1. ボタンが押され、2 つの IP アドレスが送信されました
  2. これらのアドレスが「使用中」かどうかを確認してください
    1. それらが次の場合:
      1. 表示確認ボックス
        1. 「OK」が押されたらC#関数を呼び出す
        2. そうでなければ、完了
    2. そうでない場合:
      1. C# 関数を呼び出す

ボタンが押されるとbtnLinkConnect_Click()、C# コードビハインドでクリックされたメソッドが呼び出されます。次に、「使用中」のアドレスをチェックします。デバッガーでステップ実行すると、これはすべて正常に機能しますが、アドレスが「使用中」の場合、JavaScript スクリプトを実行してボックスを表示する必要があります。

<script type="text/javascript">
    function askForOverride(station1, station2) {
        var answer = confirm("Station(s):" + PageMethods.GetActiveStations(station1, station2) + "is/are in use. Override?");
        if (answer) {
            PageMethods.uponOverride(station1, station2);
        }
    }
</script>

しかし、このスクリプトを C# ページから実行するにはどうすればよいでしょうか? を見てきましたがClientScript.RegisterStartupScript()、動作させることができず、条件内で動作できないようです。私は ajax を見てきましたが、C# コードビハインドから呼び出す方法を正確に理解できませんでした。

このスクリプトを呼び出す、または同じ結果を得る最良の方法は何ですか?また、どうすればよいですか?

4

3 に答える 3

1

これは機能する可能性があります。条件に基づいてボタン クリックのクライアント イベントを追加します。必要に応じてリファクタリングしてください

 protected void btnSumbit_Click(object sender, EventArgs e)
        {       
            //call some function to verify IP entered by user
            bool isExistingIp = VerifyIp(txtIP.Text); 
            if (isExistingIp)
            {
                // event argument PASSED when user confirm to override from client side
                string isoverride = Request.Form["__EVENTARGUMENT"]; 
                if (string.IsNullOrEmpty(isoverride))
                {                
                    //register script if user hasn't confirmed yet
                    this.ClientScript.RegisterStartupScript(this.GetType(), "displaywarning", "displaywarning();", true);
                    Page.GetPostBackEventReference(btnSumbit);
                }
                else
                {
                    //continue with functionality
                }

            }
            else
            {
                //continue with functionality
            }
        }

クライアント側で JavaScript を追加して警告を表示し、ポストバックを行います

 function displaywarning() {
            var isOverride = window.confirm("do you want to override");
            if (isOverride) {
                __doPostBack('<%=btnSumbit.ClientID%>', 'override');
            }
        }
于 2013-07-30T15:18:52.733 に答える
1

これは、jQuery AJAX 呼び出しで簡単に実行できます。

ASPX

<link rel="stylesheet" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1/themes/ui-lightness/jquery-ui.css" type="text/css" />
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.10.3/jquery-ui.min.js"></script>

<script type="text/javascript">
$(document).ready(function () {
$('body').on('click', '.performsMyClickAction', function () {
$.ajax({
    type: "POST",
    url: "BlogPost.aspx/TestIP",
    data: "{}",
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function (result) {
        if (result.d = 1) //In use
        {
            $("<div>State your confirm message here.</div>").dialog({
                resizable: false,
                height: 210,
                modal: true,
                buttons: {
                    "Ok": function () {
                        __doPostBack('<%= upnl.ClientID %>', 'InUse ');
                                        $(this).dialog("close");
                                    },
                                    "Cancel": function () {
                                        $(this).dialog("close");
                                    }
                                }
                            });
                        } else {
                            __doPostBack('<%= upnl.ClientID %>', 'NotInUse ');
                        }
                    }
                });
            });
});
</script>          

<body>
<form id="form2" runat="server">
    <asp:ScriptManager ID="ScriptManager1" runat="server" />
    <asp:UpdatePanel ID="UpdatePanel1" runat="server" OnLoad="upnl_Load">
        <ContentTemplate>
            <div>
                 <asp:Button CssClass="performsMyClickAction"  Text="Test IP" ID="Button3" runat="server" />
            </div>
</ContentTemplate>
    </asp:UpdatePanel>
</form>
</body> 

C#

protected void upnl_Load(object sender, EventArgs e)
{
    string eventTarget = (this.Request["__EVENTTARGET"] == null) ? string.Empty : this.Request["__EVENTTARGET"];

    if (string.IsNullOrEmpty(eventTarget)) return;

    var arg = Request.Params.Get("__EVENTARGUMENT");
    if (arg == null) return;

    if (!string.IsNullOrEmpty(arg.ToString()))
    {
        if (arg.ToString().IndexOf("InUse") > -1)
        {
            //Call C# function for in use.
        }

        if (arg.ToString().IndexOf("NotInUse") > -1)
        {
            //Call C# function for not in use.
        }
    }
}

[WebMethod]
public static string TestIP()
{
    //Check for IP status
    if (true)
        return "1";

    //else
    //return "0";
}

これがあなたを助けることを願っています。

于 2013-07-31T02:14:27.690 に答える