需要强制从Javascript发回,而不是通过按钮单击启动

时间:2015-09-28 16:50:44

标签: javascript c# asp.net

我需要在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"];

确认框出现,但确认值字符串始终“后面”。也就是说,如果我在确认框中单击“是”,则返回“否”;但如果我留在同一页面并再次执行该过程并单击“否”,则返回“是”;等等。 问题:如何强制回发确认值,以便及时访问代码中的响应?

1 个答案:

答案 0 :(得分:0)

有可能有四种方法可以使用/不使用回发来实现此目的: -

  1. 在代码隐藏文件中的方法上使用AjaxMethod属性,如下所示: -

    [AjaxMethod(HttpSessionStateRequirement.ReadWrite)] public object DoSomething(int countValue) { //Do Something }

    然后从ascx文件中,您可以通过执行类名称点方法名称来调用该方法。在这种情况下,方法名称是DoSomething。

  2. 如果您在ascx文件中使用ScriptManager,则可以通过将Script Manager的EnablePageMethods属性设置为true来启用页面方法调用。但是,您调用的方法应该是静态的。 MSDN link

    public static object DoSomething(int countValue) { //Do Something }

    在这里,您可以直接从JS中调用该方法。

  3. 使用以下网络服务: -

    [ScriptService] public class YourService { [WebMethod(EnableSession=true)] public object DoSomething(int countValue) { //Do Something } }

  4. 回发方式: -

    if (IsPostBack) { string ControlID = string.Empty; if (!String.IsNullOrEmpty(Request.Form["__EVENTTARGET"])) { ControlID = Request.Form["__EVENTTARGET"]; Control postbackControl = Page.FindControl(ControlID); } }