2013-03-28 60 views
1

想添加一個類似於stackoverflow的提醒框。我看到了一些很好的例子,但不是我想要的東西。我想要在不同場合出現的不同訊息。Alertover box like stackoverflow dynamic data

ex。當用戶登錄時,我想從C#代碼中獲取此信息。 當用戶下訂單時。 或者有什麼不對。

This answer is good,but the message is on the page loading on page load。另一個example展示相同。

回答

0

試試這個

public void message(string msg) 
{ 
    ScriptManager.RegisterClientScriptBlock(this, GetType(), "Done", "alert('" + msg + "');", true); 
} 

使用此方法

message("You are logged in sucessfully.");

+0

調用它通過jQuery的這是我爲前面做什麼,但它不是像計算器的警報 – 2013-03-29 17:20:21

1

如果你不想做它在頁面加載,但你希望它被後面的代碼來驅動(C#)你需要使用AJAX。

使用jQuery這是很容易做類似下面的完成(這是我的通用的「執行此控制器上這一行動」在ASP.NET MVC):

<script type="text/javascript"> 
function execute(controller, action) { 
     $.ajax({ 
      type: 'get', 
      url: ('/' + controller + '/' + action), 
      dataType: 'text' 
     }).done(function (data, textStatus, jqXHR) { 
      $('#response').html(data).slideDown(); 
     }).fail(function (jqXHR, textStatus, errorThrown) { 
      $('#response').html(jqXHR.responseText).slideDown(); 
     }); 
    } 
</script> 

可以擴大這一點通過任何數據,你需要你需要的任何URL,例如:「!的成功,你已經登錄」

<script type="text/javascript"> 
function execute(controller, action, username, password) { 
     $.ajax({ 
      type: 'get', 
      url: ('/' + controller + '/' + action), 
      dataType: 'text', 
      data: ('username='+username+'&password='+password) 
     }).done(function (data, textStatus, jqXHR) { 
      $('#response').html(data).slideDown(); 
     }).fail(function (jqXHR, textStatus, errorThrown) { 
      $('#response').html(jqXHR.responseText).slideDown(); 
     }); 
    } 
</script> 

在服務器端,你可以返回你想要的迴應說什麼字符串,如然後id'ed「響應」的元素都會有其內在的HTML換出與響應,然後會打開下跌:

<div id="response" style="display:none"></div> 

請注意,.fail()事件將推出整個錯誤如果你不只是拋出一個拋出的異常字符串,你會拋出一個頁面。 .fail()會在服務器的HTTP狀態碼不是200(OK)時觸發。

如果您使用ASP.NET MVC C#代碼可以是這樣的:

namespace MySite.Controllers 
{ 
    public class SomeController : Controller 
    { 
      public string Login(string username, string password){ 
       // Process login 
       return "You've been logged in!"; 
      } 
    } 
} 

如果您正在使用Web表單:

//On Page_Load() call a function if it's an AJAX Login 
// such as 
if(Request["ajax"] == "login"){ 
     AjaxLogin(Request["username"], Request["password"]); 
} 

private void AjaxLogin(string username, string password){ 
     // Process login 
     Response.Write("Ajax login complete!"); 
     Response.End(); // Don't send anything else and stop processing request. 
} 

然後調用它只是傳遞變量到你的功能:

<a onclick="execute('MyController', 'Login', 'UserName', 'MyPass')">Login!</a> 

顯然這假設你有你需要的數據處理登錄請求之前th安永進入,這將是一個有點弄巧成拙,所以你可以使用jQuery搶表單元素含量延伸出一個特定的功能,如:

<input type="text" name="username" id="username" /> 
<input type="text" name="password" id="password" /> 

然後在你的函數中添加:

<script type="text/javascript"> 
function login(controller, action) { 

     var username = document.getElementById('username').value; 
     var password = document.getElementById('password').value; 

     $.ajax({ 
      type: 'get', 
      url: ('/' + controller + '/' + action), 
      dataType: 'text', 
      data: ('username='+username+'&password='+password) 
     }).done(function (data, textStatus, jqXHR) { 
      $('#response').html(data).slideDown(); 
     }).fail(function (jqXHR, textStatus, errorThrown) { 
      $('#response').html(jqXHR.responseText).slideDown(); 
     }); 
    } 
</script> 
+0

非常好詳細的解答。我不使用MVC所以我可以在ASP.NET webforms中使用它嗎? – 2013-03-31 08:22:52

+0

爲Webforms添加了一個代碼示例。在Page_Load函數內部,如果它是AJAX登錄,則需要攔截,只需在Ajax調用中爲數據行添加一個額外變量,併爲其自身添加一個切換標誌,然後檢查並調用正確的函數。然後,只需將JS中的Ajax請求URL更改爲指向該頁面的URL即可。 – 2013-04-01 17:40:17

+0

此外,這是非常不安全的代碼,我不會把它投入生產,你應該做請求驗證和所有這一切。 – 2013-04-01 17:41:14

1

你需要創建一個generic-http-handlerweb servicepage-method並通過jQuery調用它並在警報中顯示該消息。

創建這樣

public class VideoViewValidation : IHttpHandler 
    { 
     public void ProcessRequest(HttpContext context) 
     { 
      string videoID = string.Empty; 
      string id = context.Request["Id"]; 
      context.Response.Writ("your message"); 
     } 
} 

的處理程序和按鈕客戶端點擊

$.ajax({ 
     url: 'VideoViewValidation.ashx', 
     type: 'POST', 
      data: { 'Id': '10000', 'Type': 'Employee' }, 
      contentType: 'application/json;charset=utf-8', 
      success: function (data) { 
        alert('Server Method is called successfully.' + data.d); 
       }, 
      error: function (errorText) { 
       alert('Server Method is not called due to ' + errorText); 
      } 
     }); 
+0

我不熟悉'generic-http-handler'。我正在使用ASP.Net webforms。它適用於那裏嗎? – 2013-04-02 04:00:47

+0

是的,它絕對就像一個沒有設計師頁面的頁面。 [這是一個很好的例子](http://encosia.com/use-asp-nets-httphandler-to-bridge-the-cross-domain-gap/) – 2013-04-02 04:17:59