最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - Validation Before Postback Event on Masterpage Asp.net - Stack Overflow

programmeradmin3浏览0评论

I was wondering if anyone knew of a way to do some client side validation with jquery and then run the postback event manually for a asp control?

Here's a sample Master page i.e.

<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>

Master Page Code Behind

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

Content Page Code behind

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;
        }
    }

Also the control lnkbtnSave is in a master page so how would i determine which content page i'm on since each content page will have it's own controls to validate.

Thanks for any help

I was wondering if anyone knew of a way to do some client side validation with jquery and then run the postback event manually for a asp control?

Here's a sample Master page i.e.

<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>

Master Page Code Behind

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

Content Page Code behind

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;
        }
    }

Also the control lnkbtnSave is in a master page so how would i determine which content page i'm on since each content page will have it's own controls to validate.

Thanks for any help

Share Improve this question asked May 13, 2009 at 23:20 zSynopsiszSynopsis 4,87222 gold badges72 silver badges107 bronze badges
Add a ment  | 

3 Answers 3

Reset to default 4

If you look at it in reverse it could be simplified. Instead of doing validation and then initiating the postback, you could validate and prevent the postback if needed.

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

If you really need to initiate the postback (and do it the other way) you could explicitly call the __doPostBack() function that ASP.NET puts on the page for you after doing your validation.

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

Let me know if any of this needs clarification.

For the first question you should be able to just return true to cause the linkbutton to postback and return false to stop it.

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

For your second question, you could have each page add their own version of the validation script, and have the function in the masterpage use it to determine validity:

Master Page:

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

Content Page:

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

You can just use a CustomValidator control and set it's ClientValidationFunction property.

发布评论

评论列表(0)

  1. 暂无评论