Проверка перед событием обратной передачи на главной странице Asp.net - PullRequest
2 голосов
/ 14 мая 2009

Мне было интересно, если кто-нибудь знает способ выполнить некоторую проверку на стороне клиента с помощью 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 находится на главной странице, так как я могу определить, на какой странице контента я нахожусь, поскольку каждая страница контента будет иметь свои собственные элементы управления для проверки.

Спасибо за любую помощь

Ответы [ 3 ]

4 голосов
/ 14 мая 2009

Если вы посмотрите на это с обратной стороны, это может быть упрощено. Вместо того, чтобы выполнять проверку и затем инициировать обратную передачу, вы можете проверить и предотвратить обратную передачу, если это необходимо.

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

Дайте мне знать, если что-то из этого требует уточнения.

2 голосов
/ 14 мая 2009

Вы можете просто использовать CustomValidator элемент управления и установить его ClientValidationFunction свойство.

2 голосов
/ 14 мая 2009

По первому вопросу вы можете просто вернуть 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;
    }
...