asp.net - 母版页 Asp.net 上的回发事件之前的验证

标签 asp.net javascript events postback

我想知道是否有人知道如何使用 jquery 进行一些客户端验证,然后为 asp.net 控件手动运行回发事件?

这是一个示例母版页 即

<script type="text/javascript">
 $(document).ready(function() {
     $("#<%=lnkbtnSave.ClientID %>").click(function() {
        alert("hello");
        // Do some validation
        // If validation Passes then post back to lnkbtnSave_Click Server side Event
        });
});
</script>
<asp:LinkButton ID="lnkbtnSave" runat="server" onclick="lnkbtnSave_Click"  ><asp:Image   ID="Image3" runat="server" ImageUrl="~/images/save.gif" AlternateText="Save" />Save</asp:LinkButton>

母版页代码隐藏

    public delegate void MasterPageMenuClickHandler(object sender, System.EventArgs e);
    public event MasterPageMenuClickHandler MenuButton;

    protected void lnkbtnSave_Click(object sender, EventArgs e)
    {
        // Assign value to public property
        _currentButton = "Save";

        // Fire event to existing delegates
        OnMenuButton(e);
    }

    protected virtual void OnMenuButton(EventArgs e)
    {
        if (MenuButton != null)
        {
            //Invokes the delegates.
            MenuButton(this, e);
        }
    }

内容页代码隐藏

protected void Page_Load(object sender, EventArgs e)
{
        Master.MenuButton += new Form.MasterPageMenuClickHandler(Master_MenuButton);
}

void Master_MenuButton(object sender, EventArgs e)
    {
        switch (Master.CurrentButton)
        {
            case "Save":
                Save();
                break;
            case "New":
                Response.Redirect("ContentPage.aspx");
                break;
            default:
                break;
        }
    }

此外,控件 lnkbtnSave 位于母版页中,因此我如何确定我所在的内容页面,因为每个内容页面都有自己的控件进行验证。

感谢您的帮助

最佳答案

如果你反过来看,它可能会被简化。您可以根据需要验证并阻止回发,而不是进行验证然后启动回发。

$('#<%= lnkbtnSave.ClientID %>').click(function(e) {
    if (!validate()) {
        e.preventDefault(); //will stop the page from posting back.
    }
});

如果您确实需要启动回发(并以其他方式执行),您可以显式调用 __doPostBack() 函数,该函数是 ASP.NET 在完成验证后为您放置在页面上的。

// This does the exact same thing as above, but it explicitly calls __doPostBack
// If you use the above code __doPostBack will be called automatically for you.
$('#<%= lnkbtnSave.ClientID %>').click(function(e) {
    if (validate()) {
        __doPostBack('<%= lnkbtnSave.ClientID %>','');
    }
    e.preventDefault();
});

如果需要澄清,请告诉我。

关于asp.net - 母版页 Asp.net 上的回发事件之前的验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/860891/

相关文章:

c# - response.write 不工作 asp.net

asp.net - 在 ASP.NET 中引用事件参数的最佳方法

php - 有没有办法使用 php 和 javascript 触发 IE 窗口从 firefox 浏览器打开?

jQuery - 如何绕过全局事件

javascript - Facebook 请求权限 JavaScript?

asp.net - SQL 语句的某些部分嵌套得太深。重写查询或将其分解为更小的查询

jquery - 如何让表格仅在页面上的自定义控件内滚动?需要 CSS 帮助

javascript - td 内的 HTML CSS 对齐

javascript - node.js 中的 net.connect 和 net.createConnection 有什么区别?

events - TCL类C10K事件服务器开发现状如何?