【问题标题】:Validation Before Postback Event on Masterpage Asp.netMasterpage Asp.net 上的回发事件之前的验证
【发布时间】:2010-10-26 01:02:32
【问题描述】:

我想知道是否有人知道使用 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 位于母版页中,所以我将如何确定我在哪个内容页面上,因为每个内容页面都有自己的控件来验证。

感谢您的帮助

【问题讨论】:

    标签: asp.net javascript events postback


    【解决方案1】:

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

    $('#<%= 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();
    });
    

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

    【讨论】:

      【解决方案2】:

      对于第一个问题,您应该能够只返回 true 以使链接按钮回发并返回 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;
          }
      

      【讨论】:

      • 谢谢吉米!我从来不知道你能做到。
      【解决方案3】:

      您可以只使用CustomValidator 控件并将其设置为ClientValidationFunction 属性。

      【讨论】:

        猜你喜欢
        • 2011-09-17
        • 2010-09-19
        • 1970-01-01
        • 1970-01-01
        • 2019-06-25
        • 2015-07-04
        • 1970-01-01
        • 1970-01-01
        • 2021-12-05
        相关资源
        最近更新 更多