现在我做一个功能。在gridview的模板列里面有一个批准按钮,我想点击批准时弹出对话框,点击相应按钮后回复数据,然后程序选择操作。开始我用那个隐藏域进行传值的,“ScriptManager.RegisterClientScriptBlock(this, typeof(Page), "m", "delData();", true);”调用js。但是我点击一次“是”后传到后台的是空值,到第二次才是“true”,每次都延迟一次,我想是程序后台去隐藏域的值在先,虽然代码是把取隐藏域的值放在调用前台js后面。2、然后我利用了js pageMethods 的方法调用后台的静态方法,虽然值实时传到后台了但是没办法让判断语句获取到我的代码是如下:
static string CallBackValue = "";
//CallBackValue 是定义的string型的全局变量
public void del(object sender, EventArgs e)
{
Button btn = (Button)sender;
int id = int.Parse(btn.CommandArgument);
if (btn.CommandName == "approve")
{
ScriptManager.RegisterClientScriptBlock(this, typeof(Page), "m", "delData();", true);
ScriptManager.RegisterStartupScript(this.Page, this.GetType(), "m", "alert(" + CallBackValue + ")",true); //这里的CallBack一直是空值
}
}
[WebMethod]
public static void getvalue(string value)
{
CallBackValue = value;
}
.js
<script type="text/javascript" language="javascript">
function delData()
{
var value = confirm("是否批准");
PageMethods.getvalue(value);
}
</script>
运行结果是:第一次点击按钮后台弹回空值 在点击时js报"True" 未定义或者"False"未定义,后台不弹值
这种实验失败后又使用后台添加js的办法
btn.Attributes.Add("onclick", "return confirm('是否批准')");
但是第一次点击"是"的时候无效后来就好了,我以为是onload里面的if(!PostBack)的原因就把它给注销了,再点击的时候就没反应。
我很纳闷不知道问题出在哪里,请各位大哥指点指点,这个功能怎么做更方便呢。
这个得用ajax交互去获取confirm的值
可以考虑下如果confirm的值是true的话,然后再提交数据。