2009-08-05 4 views
9

私は、ページと名前でページを保存する簡単なコンテンツ管理システムを持っています。 Saveをクリックすると、自分のコード(サーバー側)がPagename/Versionの存在を確認します。asp.netの実行時の確認ダイアログ

存在する場合は、現在のページ名/バージョンを置き換えるかどうかを確認する確認ダイアログボックスを表示したいと思います。

これを達成する最も簡単な方法は何ですか?ありがとう。

答えて

7

私はこれまでの回答に感謝しています。回答を検討してより多くの研究をした後、私は自分の解決策を投稿しているので、他の人に役立つかもしれません。

ボタンコード:

<asp:Button ID="btnSave" OnClick="btnSaveClick" runat="server" Text="Save" OnClientClick="return CheckForVersion()" /> 

Javascriptを:サブソニック2.1を使用して

<script language="javascript"> 
    function CheckForVersion() { 
     PageMethods.CheckForVersion(aspnetForm.ctl00$ContentPlaceHolder1$ddlPageName2.value, aspnetForm.ctl00$ContentPlaceHolder1$txtContentName2.value, OnSucceeded, OnFailed); 
     return false; 
    } 

    function OnSucceeded(results) { 
     if(results) { 
      //version exists so prompt user 
      if(confirm("Version already exists. Do you want to overwrite?")) { 
       __doPostBack('ctl00$ContentPlaceHolder1$btnSave',''); 
      } 
     } 
     else 
     { 
      //version does not exist so save it without prompting user 
      __doPostBack('ctl00$ContentPlaceHolder1$btnSave',''); 
     } 

    } 

    function OnFailed(error) { 
     // handle pagemethod error 
     alert(error.get_message()); 
    } 

</script> 

のC#:

[WebMethod] 
    public static bool CheckForVersion(string pageName, string versionName) 
    { 
     PageContentCollection pages = new PageContentCollection().Where("pageName", pageName).Where("versionName", versionName).Load(); 
     if (pages.Count > 0) 
      return true; 
     else 
      return false;    
    } 
13
<asp:Button OnClientClick="return confirm('Are you sure you want to go?');" 
      Text="Confirm" runat="server" onclick="Unnamed1_Click" /> 

彼らは[OK]をクリックすると、サーバーのonclickイベントは、彼らがキャンセル]をクリックした場合、彼らも、ボタンを押さなかったもちろん、あなたは常にキャンセル部分にfunctionallityを追加することができますように、それはなり、発生します。

たぶんのようなもの:

<html xmlns="http://www.w3.org/1999/xhtml" > 
<head runat="server"> 
    <title></title> 
    <script type="text/javascript"> 
     function CompareConfirm() 
     { 
      var str1 = "abc"; 
      var str2 = "def"; 

      if (str1 === str2) { 
       // your logic here 
       return false; 
      } else { 
       // your logic here 
       return confirm("Confirm?"); 
      } 
     } 
    </script> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <div> 
     <asp:Button OnClientClick="return CompareConfirm();" 
      Text="Confirm" runat="server" onclick="Unnamed1_Click" /> 
    </div> 
    </form> 
</body> 
</html> 
+0

この機能を追加するたとえば、あなたのページに隠しフィールドを追加します。 –

0

は、クライアントにページをレンダリングする前にチェックを入れてください。次に、確認ボックスを表示する保存ボタンまたはフォームにハンドラ(クライアント側の例:javascriptなど)を添付します(ただし、保存結果が置換された場合のみ)。

+0

ユーザーはテキストボックスにページ名/バージョン名を入力するので、レンダリング前にどのようにチェックするかわかりません。私はチェックのためのjavascriptのpagemethodを使用することができたが、これは最善の方法ですか? –

+0

2つの文字列をチェックするだけの場合は、JSでCompareConfirm()メソッドを実行し、asp:Button OnClientClickイベントで呼び出して2つの文字列を比較し、Confirm()メソッドを返すようにすることができます。私は以下の答えでもう少し詳しく説明します。 – Carlo

1

代わり、AJAXを必要としない単純なアプローチができるようになりますポストバックは通常通り、コードビハインドでは、あなたのチェックをしてください。

ユーザーの確認が必要な場合は、ユーザーを同じページに戻しますが、追加のパネルを表示して元の[保存]ボタンを非表示にします。

この追加のパネルでは、別の[OK /キャンセル]ボタンを使用してメッセージを表示します。ユーザーがこの[OK]ボタンをクリックすると、保存を実行します。

0

はHiddenfield1

が、私は、彼はかなりJavaScriptで、サーバー側で比較したいと思います

public bool Confirm(string MSG) 
{ 
    string tmp = ""; 
    tmp = "<script language='javascript'>"; 
    tmp += "document.getElementById('HiddenField1').value=0; if(confirm('" + MSG + "'))   document.getElementById('HiddenField1').value=1;"; 
    tmp += "</script>"; 
    Page.ClientScript.RegisterClientScriptBlock(Page.GetType(), "ConfirmBox", tmp); 
    if(HiddenField1.Value.Trim()=="0") return false; 
    return true; 
} 
+0

私はIE9とFF26でこのテクニックを試しましたが、確認ダイアログが表示されません。エラーはなく、確認ダイアログはありません。この種の問題の最も一般的な原因は何ですか? – Tevya

関連する問題