繁体   English   中英

验证主页Asp.net上的回发事件之前的验证

[英]Validation Before Postback Event on Masterpage Asp.net

我想知道是否有人知道用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.
    }
});

如果你真的需要启动回发(并以另一种方式执行),你可以在进行验证后显式调用ASP.NET为你提供的__doPostBack()函数。

// 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();
});

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

对于第一个问题,您应该能够返回true以使linkbutton回发并返回false以停止它。

$(document).ready(function() {     
   $("#<%=lnkbtnSave.ClientID %>").click(function() {        
      alert("hello");        
      var isValid = false;
      // Do some validation
      return isValid;
    });
 });

对于第二个问题,您可以让每个页面添加自己的验证脚本版本,并让母版页中的函数使用它来确定有效性:

母版页:

$(document).ready(function() {     
   $("#<%=lnkbtnSave.ClientID %>").click(function() {                  
      return pageIsValid();
    });
 });     

内容页:

    function pageIsValid() {
       var isValid = false;
       //validation logic
       return isValid;
    }

您可以使用CustomValidator控件并设置它的ClientValidationFunction属性。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM