我需要在ASPX页面中使用JavaScript Confirm功能,以根据未直接连接到按钮单击事件的C#代码中的条件确认各种操作。例如。如果计算出记录数> 200,问'你想继续吗?'然后根据是或否点击执行相关操作。 我将我的JavaScript定义为:
<script type = "text/javascript">
function Confirm(val) {
var confirm_value = document.createElement("INPUT");
confirm_value.type = "hidden";
confirm_value.name = "confirm_value";
if (confirm(val)) {
confirm_value.value = "Yes";
} else {
confirm_value.value = "No";
}
document.forms[0].appendChild(confirm_value);
}
</script>
从后面的代码调用它并使用RegisterStartupScript和Request.Form获取响应,如下所示:
ScriptManager.RegisterStartupScript(this.Page, this.GetType(), "confirm_value", String.Format("Confirm('{0}');", msgstr), true);
string confirmvalue = Request.Form["confirm_value"];
确认框出现,但确认值字符串始终“后面”。也就是说,如果我在确认框中单击“是”,则返回“否”;但如果我留在同一页面并再次执行该过程并单击“否”,则返回“是”;等等。 问题:如何强制回发确认值,以便及时访问代码中的响应?
答案 0 :(得分:0)
有可能有四种方法可以使用/不使用回发来实现此目的: -
在代码隐藏文件中的方法上使用AjaxMethod属性,如下所示: -
[AjaxMethod(HttpSessionStateRequirement.ReadWrite)]
public object DoSomething(int countValue)
{
//Do Something
}
然后从ascx文件中,您可以通过执行类名称点方法名称来调用该方法。在这种情况下,方法名称是DoSomething。
如果您在ascx文件中使用ScriptManager,则可以通过将Script Manager的EnablePageMethods属性设置为true来启用页面方法调用。但是,您调用的方法应该是静态的。 MSDN link
public static object DoSomething(int countValue)
{
//Do Something
}
在这里,您可以直接从JS中调用该方法。
使用以下网络服务: -
[ScriptService]
public class YourService
{
[WebMethod(EnableSession=true)]
public object DoSomething(int countValue)
{
//Do Something
}
}
回发方式: -
if (IsPostBack)
{
string ControlID = string.Empty;
if (!String.IsNullOrEmpty(Request.Form["__EVENTTARGET"]))
{
ControlID = Request.Form["__EVENTTARGET"];
Control postbackControl = Page.FindControl(ControlID);
}
}