关于C#中使用messagebox的问题解答

对于winform中的messagebox要在C# for web form中使用是不能正常运行的了,原因是对于客户端不作什么软件安装要求而仅有ie的情况下,在客户端运行这样的web页面:页面中有调用了这个函数的一个事件过程,结果一单击这个过程,对话框却在服务端显示了而不是想象中的在客户端上显示,不知各位碰到过这样的问题没有,莫非一定要用js写吗。

void MessageBox(Page page, string msg)
{
    string s, key;
    key = "MessageBox"+msg;
    s = string.Format("<script>alert({/"0}/"))</script>", msg);
    if(page.IsClientScriptBlockRegistered(key) == false)
    {
        page.RegisterClientScriptBlock(key, s);
    }
}

//使用
MessageBox(this, "xxxx");

要求由于鼠标单击产生的对话框含有2个按钮以及能够单击其一,且在有ie浏览器的客户端都能正常显示出来而不仅仅是显示一段string 

在服务端创建一个Confirm类,如下:

public enum ConfirmTypes : int
{
 OK = 1,
 Cancel = 2
};

public class Confirm
{
 public delegate void ConfirmHandler(ConfirmTypes type);

 public Confirm()
 {
  //
  // TODO: Add constructor logic here
  //
 }

 public string ScriptOKFun = "";
 public string ScriptCancelFun = "";
 public event ConfirmHandler ConfirmEvent;

 public void OnConfirmHandle(ConfirmTypes type)
 {
  if( ConfirmEvent != null )
  {
   System.Delegate[] eventMethods = ConfirmEvent.GetInvocationList();
   ConfirmHandler method;
   for(int i=0; i<eventMethods.Length; i++)
   {
    method = eventMethods[i] as ConfirmHandler;
    if( method != null )
    {
     method(type);
    }
   }
  }
 }

 public void Register(System.Web.UI.Page page, string msg)
 {
  string s, key, hiddenID;
  key = "Confirm"+page.ClientID;
   
  hiddenID = "HiddenConfrim";

  if( page.IsStartupScriptRegistered(key) == false )
  {
   s = "<script>/n"
    +"var v='';/n"
    +string.Format("if( confirm(/"{0}/"))/n", msg)
    +"{/n"
    +" v='1'/n";

   if( this.ScriptOKFun.Length > 0)
   {
    s+=string.Format(" if({0}==false) v='';/n", this.ScriptOKFun);
   }

   s+="/n"
    +"}"
    +"else"
    +"{"
    +" v='2'/n";

   if( this.ScriptCancelFun.Length > 0 )
   {
    s+=string.Format(" if({0}==false) v='';/n", this.ScriptCancelFun);
   }

   s+="/n"
    +"}"
    +string.Format("document.getElementById('{0}').value=v;/n", hiddenID)
    +"if(v!='') document.forms[0].submit();/n"
    +"</script>";

   page.RegisterHiddenField(hiddenID, "");
   page.RegisterStartupScript(key, s);
   //page.RegisterStartupScript
  }
 }

 public void DoEvent(System.Web.UI.Page page)
 {
  string hiddenID = "HiddenConfrim";
  string s = page.Request.Form[hiddenID];

  if( s == null || s.Length == 0 )
  {
   return;
  }

  ConfirmTypes type = (ConfirmTypes) Convert.ToInt32(s);
  this.OnConfirmHandle(type);
 }
}

在页面的cs中使用方法:
1. 在页面中声明对象:
WebApplication1.Confirm confirm = new Confirm();
2. 定义服务端响应事件的方法 (可选,如果你需要在客户端点OK或Cancel后回到服务端相应): 
  public void ConfirmHandler(ConfirmTypes type)
  {
   ...
  }

3. 在Page_Load中:
//连接响应事件(可选)
confirm.ConfirmEvent += new Confirm.ConfirmHandler(ConfirmHandler );
//设置客户端在点击Cancel后执行的客户端方法(可选)
confirm.ScriptCancelFun = "testCancel()";
//设置客户端在点击OK后执行的客户端方法(可选)
confirm.ScriptOKFun = "testOK()";
//触发 ConfirmEvent  事件, (如果设置了响应事件, 必须执行下面方法, 否则无法触发事件)
confirm.DoEvent(this.Page);(可选)
4. 在需要使用提示信息的地方:
  private void Button2_Click(object sender, System.EventArgs e)
  {
   confirm.Register(this.Page, "test confirm message");
  }

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值