Действительно поместите материал, связанный с авторизацией/управлением доступом в контроллере.
Модели - все о Ваших данных. Проверка, Отношения, CRUD, Бизнес-логика
Представления о показе Ваших данных. Дисплей и быть введенным только.
Контроллеры об управлении, какие данные идут от Вашей модели до Вашего представления (и которые просматривают), и от Вашего представления до Вашей модели. Контроллеры могут также существовать без моделей.
мне нравится думать о контроллере как охраннику / регистратор, который направляет Вас клиент (запрос) к соответствующему счетчику, где Вы задаете кассиру (представление) вопрос. Кассир (представление) тогда идет и получает ответ от менеджера (модель), кого Вы никогда не видите. Вы запрос тогда возвращается к охраннику / регистратор (контроллер) и ожидает, пока Вы не предписаны пойти другой кассир (представление), кто говорит Вам ответ, менеджер (модель) сказал им в ответ на другого кассира (представление) вопрос.
Аналогично, если Вы хотите сказать кассиру (представление) что-то тогда в основном, то же самое происходит кроме второго кассира, скажет Вам, принял ли менеджер Вашу информацию. Также возможно, что охранник / регистратор (контроллер), возможно, сказал Вам брать экскурсию, так как Вы не были разрешены сказать менеджеру ту информацию.
Так для расширения метафоры, в моем стереотипном и нереалистичном мире, кассиры (представления) симпатичны, но легкомысленны и часто верят чему-либо, что Вы говорите им, охранник / регистраторы минимально вежливы, но не очень хорошо осведомлены, но они знают, где люди должны и не должны идти, и менеджеры действительно уродливы и имеют в виду, но знают все и могут сказать то, что верно и что не.
Не забудьте установить это свойство на CustomValidator ...
ValidateEmptyText="True"
В дополнение к приведенным выше предложениям, я обнаружил, что в более новых версиях .Net framework вы должны явно запустить метод validate () на сервере, чтобы получить пользовательскую процедуру проверки
// validate page before allowing import to go through
Page.Validate();
if (!Page.IsValid)
return;
Убедитесь, что для свойства CustomValidator
установлено значение true
, поэтому пустой текст будет проверен. Тогда вам больше не понадобится RequiredFieldValidator
.
РЕДАКТИРОВАТЬ: Я взял ваш код и скопировал и вставил его в пустой проект, и он работает, как ожидалось. Должно быть, что-то, что вы не опубликовали или публикуете неправильно, о чем мы не знаем. Есть ли что-то еще, что влияет на кнопку, которая запускает проверку или сами элементы управления проверкой?
РЕДАКТИРОВАТЬ: Вот точный код (он находится на странице содержимого):
aspx page:
<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
<asp:TextBox ID="txtPRI" runat="server" Width="295" /><br />
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" display="Dynamic" CssClass="leftAlign" SetFocusOnError="true" runat="server" controltovalidate="txtPRI" errormessage="Please enter your PRI" />
<asp:CustomValidator runat="server" id="cusCustom" controltovalidate="txtPRI" onservervalidate="cusCustom_ServerValidate" Enabled="true" ValidateEmptyText="true" display="Dynamic" CssClass="leftAlign" SetFocusOnError="true" errormessage="The text must be exactly 8 characters long!" />
</asp:Content>
.cs page (пусто Page_Load
):
protected void cusCustom_ServerValidate(object sender, ServerValidateEventArgs e)
{
// put a break point here and it stops on it
if (e.Value.Length == 8)
e.IsValid = true;
else
e.IsValid = false;
}
Проблема в том, что вы звоните Response.End()
, что фактически останавливает все выполнение страницы. Таким образом, блок if / else вообще не запускается. Закомментируйте эту строку или пропустите ее во время отладки, и валидатор сработает, как и ожидалось.
Я предлагаю вам использовать отладчик вместо того, чтобы писать ответы таким образом, или знать о последствиях Response.End()
, если вы решите его использовать.