Member 9374423 Ответов: 1

Input submit onlick и onserverclick не работают


Привет

Я работаю над простым экраном входа в систему с приведенным ниже кодом:

<form id="login">
    <div class="formHeader">
      <h1>Login</h1>
    </div>
    <div class="formDiv">
      <input type="text" placeholder="Email" name="txtEmail"/>
      <div class="inputImage fa fa-user"></div>
    </div>
    <div class="formDiv">
      <input type="password" placeholder="Password" name="txtPassword"/>
      <div class="inputImage fa fa-lock"></div>
    </div>
    <div class="formDiv">
      <label id="remember">
        <input type="checkbox" name="cbxRemberMe" value="Checked"/>
        <div class="checkbox"></div><span>Remember me</span>
      </label>
    </div>
    <div class="formDiv">
      <input type="submit" value="LOGIN" runat="server" onserverclick="btnLogin_Click" onclick="btnLogin_Click" />
    </div>
    <div class="formFooter"><a class="forgot" href="#">Forgot Password</a></div>
  </form>


и внутренний код

 protected void btnLogin_Click(object sender, EventArgs e) 
{

}


Но кнопка вообще не вызывает внутренний код.

Ничего не происходит, кроме изменения URL-адреса с
"http://localhost:15726/Pages/Login.aspx" в
"http://localhost:15726/Pages/Login.aspx?txtEmail=&txtPassword=&ctl00=логин"

Я не могу поместить атрибут Runat=Server в форму, так как у меня есть 2 формы на этой странице (Вход и регистрация)

любая помощь будет оценена по достоинству.

Что я уже пробовал:

1. играем с Runat=Server, onclick() и OnServerClick() (меняем местами и меняем их местами)

2. Создание типа ввода=submit / input type=button

ничего из этого не работает.

1 Ответов

Рейтинг:
1

F-ES Sitecore

Url-адрес обновляется таким образом, потому что у вас нет POST в качестве метода формы

<form id="login" method="POST">


Однако это не главная ваша проблема. Вы можете иметь несколько форм на странице, Если вам нужно, они просто не могут быть вложенными, и только одна может иметь runat=server. Если ваши формы не являются вложенными, то вы можете использовать обычную форму, но вы не сможете использовать серверные функции, как это делается с элементами управления asp. Вместо этого вам нужно будет использовать событие page_load и использовать запрос.Элемент управления формыИмяЗдесь"] для анализа значений компонентов вашей формы (обратите внимание, что это имя элемента управления, нет идентификатор, используемый для ссылки на элемент управления).

Если ваши формы *являются* вложенными, то вам нужно избавиться от всех, кроме внешней формы, и обернуть внутреннюю группу элементов управления login в asp:Panel и указать атрибут "DefaultButton" панели

<asp:Panel DefaultButton="btnLogin" runat="server">
    <asp:TextBox ID="txtUsername" runat="server" />
    <asp:Button ID="btnLogin" Text="Login" runat="server" />
</asp:Panel>


Это создает своего рода виртуальную форму внутри формы, где, если кто-то нажмет RETURN на поле имени пользователя, он нажмет кнопку входа, позволяющую вам использовать btnLogin_Click. Это вызовет обратную передачу, содержащую всю форму, но вы просто игнорируете элементы управления, которые вас не интересуют.

Итак, чтобы подвести итог, либо используйте не вложенную несерверную форму, либо используйте запрос.Форма для чтения значений из элементов формы или иметь одну серверную форму, содержащую все элементы управления, и использовать Panel\DefaultButton для создания формы внутри формы.