У меня есть следующий код с RequiredFieldValidator
. Свойство EnableClientScript
устанавливается как "false" в элементе управления проверки. Также я отключил script в браузере.
Я НЕ использую Page.IsValid
в коде позади. Тем не менее, когда я отправляю без каких-либо значений в текстовое поле, я получу error message
.
Из комментариев @Dai, я узнал, что это может быть проблемой, если в Page_Load
есть код в postback
. Ошибок проверки не будет.
(Тем не менее, для обработчика нажатия кнопки нет необходимости проверять Page.IsValid
)
if (Page.IsPostBack)
{
string value = txtEmpName.Text;
txtEmpName.Text = value + "Appended";
}
Вопрос
- Почему проверка на стороне сервера не выполняется до
Page_Load
? - Почему он работает нормально, когда я использую
Page.IsValid
? - Можете ли вы предоставить какую-либо ссылку на статью, которая объясняет это? (Не то, что говорит - всегда используйте
Page.IsValid
, но что-то, что говорит об обязательных сценариях использованияPage.IsValid
ОБНОВЛЕНИЕ 1
Обратитесь Валидаторы ASP.NET Общее заблуждение
Page.IsValid
доступен только после запуска методаPage.Validate()
, который вызывается неявно где-то послеPage_Load
. Если вы сохраняете всю свою логику в обработчике событий Page_Load (который сильно обескуражен!), ВызовитеPage.Validate()
перед проверкойPage.IsValid
.
Примечание. Рекомендуется не хранить всю логику в Page_Load
. Если что-то произойдет в событии нажатия кнопки, переместите его в обработчик события нажатия кнопки. Если что-то произойдет в выпадающем событии, переместите его в раскрывающийся список обработчиков событий смены элементов.
ОБНОВЛЕНИЕ 2
Похоже, нам нужно добавить If(Page.IsValid)
в button click
также, если мы используем Custom Validator
с проверкой на стороне сервера. Refer CustomValidator не работает хорошо.
Примечание. Вопрос валидации на стороне клиента присутствует здесь: Использовать ли Page_IsValid или Page_ClientValidate() (для событий на стороне клиента) p >
MARKUP
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
<script type="text/javascript">
alert('haiii');
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:ValidationSummary runat="server" ID="vsumAll" DisplayMode="BulletList" CssClass="validationsummary" ValidationGroup="ButtonClick" />
<asp:TextBox ID="txtEmpName" runat="server"></asp:TextBox>
<asp:RequiredFieldValidator ID="valEmpName" runat="server" ControlToValidate="txtEmpName"
EnableClientScript="false" ErrorMessage="RequiredFieldValidator" Text="*" Display="Dynamic"
ValidationGroup="ButtonClick"></asp:RequiredFieldValidator>
<asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Button" ValidationGroup="ButtonClick" />
</div>
</form>
</body>
</html>
CODE BEHIND
protected void Button1_Click(object sender, EventArgs e)
{
string value = txtEmpName.Text;
SubmitEmployee(value);
}
Ссылки