对于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");
}