#javascript #c# #asp.net
#javascript #c# #asp.net
Вопрос:
Проблема:
У меня есть форма с кодом за функцией, и я также делаю некоторые проверки js, и я не хочу, чтобы код за функцией работал, если js возвращает false. Я пытался использовать OnClientClick и возвращать false в конце функции, но у меня не получилось.
aspx:
<asp:Button ID="Button1" runat="server"
CssClass="action-button"
OnClientClick="return updateValidation();"
OnClick="Button1_Click" Text="Update" />
Код за:
public partial class Update : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if(!Page.IsPostBack amp;amp; Session["user"] != null)
{
UserService us = new UserService();
string id = Session["user"] as string;
string selectQuery = "SELECT * FROM users WHERE ID = '" id "'";
DataTable table = us.ExecuteDataTable(selectQuery);
SignUpName.Value = table.Rows[0]["fName"] as string;
SignUpLastName.Value = table.Rows[0]["lName"] as string;
email.Value = table.Rows[0]["email"] as string;
birthDate.Value = table.Rows[0]["birthDate"] as string;
city.Value = table.Rows[0]["city"] as string;
address.Value = table.Rows[0]["address"] as string;
zipCode.Value = table.Rows[0]["zipcode"] as string;
Password.Value = table.Rows[0]["userPassword"] as string;
}
}
protected void Button1_Click(object sender, EventArgs e)
{
string id = Session["user"] as string;
string fName = SignUpName.Value.ToString();
string lName = SignUpLastName.Value.ToString();
string UserbirthDate = birthDate.Value.ToString();
string Usercity = city.Value.ToString();
string UserAddress = address.Value.ToString();
string UserZipCode = zipCode.Value.ToString();
string UserEmail = email.Value.ToString();
string userPassword = Password.Value.ToString();
UserService us = new UserService();
User u = new User(fName, lName, id, UserbirthDate, Usercity, UserAddress, UserZipCode, UserEmail, userPassword);
us.UpdateUser(u);
}
}
Javascript:
function updateValidation() {
window.check = true;
checkFName();
checkLName();
checkEmail();
checkBrithDate();
checkCity();
checkAddress();
checkZipCode();
checkPassword();
return check;
}
Я уже пробовал возвращать false в конце js в любом случае, но это тоже не сработало.
Комментарии:
1. ваш код правильный, но на самом деле вы не возвращаете
windows.check
! вы возвращаете толькоcheck
то, что не является false или true. Кроме того, если у вас есть какие-либо ошибки javascript, проверка возврата также не работает.
Ответ №1:
Код хорошо структурирован, и ваша window.check
переменная имеет boolean
значение, но вместо этого вы возвращаете переменную с именем check
, которую я не вижу объявленной или изменяемой где-либо в вашем примере кода. Это означает, check
что переменная не имеет boolean
значения, скорее она имеет undefined
или null
в нем.
См.:
function updateValidation() {
window.check = true;
checkFName();
checkLName();
checkEmail();
checkBrithDate();
checkCity();
checkAddress();
checkZipCode();
checkPassword();
// Instead of just returning check, return window.check
return window.check;
}
Если это тоже не сработает, то несомненно, что boolean
is всегда true
, что не останавливает отправку обратно.
Кроме того, вы можете использовать jquery
для привязки события, что является моим предпочтительным способом привязки событий:
<asp:Button ID="Button1" runat="server"
CssClass="action-button"
OnClick="Button1_Click" Text="Update" />
$(document).ready(function(){
$('#<%= Button1.ClientID %>').on('click', function(){
window.check = true;
checkFName();
checkLName();
checkEmail();
checkBrithDate();
checkCity();
checkAddress();
checkZipCode();
checkPassword();
// Instead of returning check, return window.check
return window.check;
});
// Your Javascript functions go here...
});
Обратите внимание, я удалил OnClientClick
событие из разметки кнопки и привязал событие непосредственно к элементу, что лучше, чем возвращать boolean
значение дважды, одно в самом методе, а второе в разметке кнопки.
Обновить
Я подозреваю, что ваш window.check
объект не определен. Именно поэтому он возвращает undefined
вместо логического значения. Я бы рекомендовал вам window.check
заменить только глобальную переменную check
, как показано ниже:
$(document).ready(function(){
var check; // declare a variable named check in global scope to the click event
$('#<%= Button1.ClientID %>').on('click', function(){
check = true; // set the initial value
checkFName();
checkLName();
checkEmail();
checkBrithDate();
checkCity();
checkAddress();
checkZipCode();
checkPassword();
return check; // return the variable check instead of window.check
});
// Your Javascript functions go here...
});
Комментарии:
1. Я пробовал это и даже возвращал false в конце js в любом случае, но это все равно не сработало. Код за функцией все еще активируется
2. Пожалуйста, попробуйте проверить значение
window.check
. Я подозреваюundefined
, что именно поэтомуCodeBehind
запускается.
Ответ №2:
Вы должны вызвать функцию button1_Click после функции updateValidaton . Вы можете сделать это следующим образом: в элементе button замените button1_Click на функцию myFunction (или как угодно, и чтобы она вызывалась). Затем: функция myFunction(){ if (updateValidation()) button1_Click(); }
Он вызовет функцию button1_Click только в том случае, если проверка вернет true .
Комментарии:
1. js. Я не думаю, что вы можете вызвать функцию js из-за
2. но onClick также работает с функциями js ..? не только onclientclick ?
3. он возвращает ошибку о том, что на моей странице нет определения для myFunction
Ответ №3:
Измените ASPX на следующий (обратите внимание на event
переданный в функцию JS и удаленный return
):
<asp:Button ID="Button1" runat="server"
CssClass="action-button"
OnClientClick="updateValidation(event);"
OnClick="Button1_Click" Text="Update" />
Если window.check
это глобальный параметр bool, проверьте его в функции JS и предотвратите событие отправки (обратите внимание на event
):
function updateValidation(event) {
window.check = true;
checkFName();
checkLName();
checkEmail();
checkBrithDate();
checkCity();
checkAddress();
checkZipCode();
checkPassword();
if (window.check == false) {
event.preventDefault();
}
return check;
}
Как правило, для достижения этой цели вы должны использовать встроенные средства проверки веб-форм, вы можете прочитать об этом здесь: https://www.codemag.com/Article/0307101/Validating-Data-On-Web-Forms
Комментарии:
1. Я скопировал ваш код, но код за функцией все еще активируется в любом случае.
2. @nettqbbrq убедитесь, что значение
window.check
переменной равно false, иначе оно не войдет вif
инструкцию.3. Я даже пытался выполнить event.preventDefault(); если это не false и это не сработало
4. @nettqbbrq если все, что вы хотите, это запретить отправку кнопки во всех случаях, то переместите
event.preventDefault()
внешнюю частьif
инструкции или даже в качестве первого оператора в функции JS, убедитесь, что вы скопировали код ASPX5. но как я могу сделать это вне оператора if, если я хочу, чтобы это происходило только в определенных ситуациях ..?