1

想要添加一个像 stackoverflow 这样的警告框。我看到了一些很好的例子,但不是我想要的。我想要在不同场合出现的不同消息。

前任。当用户登录时,我想要来自 C# 代码的这个消息。当用户下订单时。或者有什么问题。

这个答案很好,但是页面加载时出现了消息。另一个例子也证明了这一点。

4

3 回答 3

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 "response" 将其内部 HTML 与该响应交换出来,然后将被滑开:

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

请注意,如果您不只是在抛出的异常上返回字符串,那么 .fail() 事件将推出您将抛出的整个错误页面。如果来自服务器的 HTTP 状态码不是 200(OK),.fail() 将触发。

如果您使用的是 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!";
          }
     }
 }

如果您使用网络表单:

 //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>

显然,这假设您在登录请求进入之前拥有处理登录请求所需的数据,这会有点自我挫败,因此您可以使用 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>
于 2013-03-29T04:29:35.440 回答
1

您需要创建一个generic-http-handleror web serviceorpage-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");
      }
}

并在按钮客户端单击时通过 jQuery 调用它

$.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);
          }
       });
于 2013-03-29T04:34:34.757 回答
0

尝试这个

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

使用这种方法

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

于 2013-03-28T06:55:07.740 回答