powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / MVC: обработка исключения в контроллере
25 сообщений из 406, страница 15 из 17
MVC: обработка исключения в контроллере
    #38773225
codearticles.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hVosttcodearticles.ru1. Мы не получим ошибку The required anti-forgery form field "__RequestVerificationToken" is not present;
2. $(".email").text() не играет роли, я тебе уже 10 раз об этом писал. $.post постит форму, а не $(".email").text()
3. JSON.stringify(model) и не должна мапиться в модель, мапиться в модель будет вся форма. Тоже писал об этом. Это обычный огрызок кода, который нужно выкинуть. Но так или иначе он 100% работает
4. Ну так и пусть идет валидация всего класса. Пусть пользователь всё вводит, а потом мы отвалидируем. Если ты хочешь более гибкого решения, чтобы не зависеть от остальной валидации, то сделай вторую модель IValidatableObject и реализуй в ней проверку на email. И дергай её аяксом. Это всё уже дополнительная логика, которая не обсуждалась изначально. И тем не менее, эта логика отлично ложится в IValidatableObject
5. Я тебе еще раз повторяю, не нужно ничего парсить. Выше я пример дал, валидаторы штатно отработают. Если нужна гибкая динамика, выше я дал пример, как рендерить словарь ошибок в валидаторе формы через аякс. Опять же, штатные валидаторы рулят.

на счёт пунктов 2-4, скайана прав. придётся признать.
Что признать? Нечего там признаваться, я прокомментировал каждый пункт.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38773227
codearticles.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hVosttниправильно мешать атрибуты с IValidatableObject, ваще.
Глупости. IValidatableObject отлично вписывается сюда.

hVosttЕсть же атрибут [Remote], чем он вам не угодил, не пойму???
Почему не угодил? Хороший вариант.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38773260
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вообще в WildApricot валидация выглядит так:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
[DataContract]
public class PageJsonModel
{
    public static readonly int NameMaxLength = 100;
    public static readonly int UrlMaxLength = 250;
    private const string UrlValidSimbolsMask = @"^[0-9a-zA-Z\-_\=\+\~\!\@\$\&\*\(\) ]*([\.\/][0-9a-zA-Z\-_\=\+\~\!\@\$\&\*\(\) ]*)*/?$";
    private const string UrlInvalidSubstringsMask = @"^(Sys|Admin|EmailTracker|Captcha|Content|WebDav|Common|Errors|Widget|Logs|Resources|RadControls|App_Themes|Payments|DES|event-.*|page-.*|Info/TermsOfUse|Info/UsageGuidelines|Info/PrivacyPolicy|Info/DialogOuterFrame)(/.*)?$|^(SupportTicketsHandler\.ashx|DESGetFiles\.aspx|ViewEvent\.aspx|DocumentHandler\.ashx|KeepSessionAlive\.ashx|CheckHttpsAuthentication\.aspx|Default\.aspx)$|(^.*?\.(config|asmx|axd|jpe?g|png|bmp|gif|swf|js|css))$";

    [DataMember(Name = "customUrl")]
    public string CustomUrl { get; set; }

    [DataMember(Name = "name")]
    public string Name { get; set; }

    [DataMember(Name = "seoSettings")]
    public SeoSettingsModel SeoSettings { get; set; }

    public static ValidationModel ValidationModel
    {
        get
        {
            var factory = new ValidationModelBuilder();

            return factory.CreateValidationModel<PageJsonModel>().Rules
                          .MaxLength.Of(o => o.Name).Is(NameMaxLength).FieldTitle(ValidationResources.PageName_FieldTitle)
                          .MaxLength.Of(o => o.CustomUrl).Is(UrlMaxLength).FieldTitle(ValidationResources.PageCustomUrl_FieldTitle)
                          .Mask.Of(o => o.CustomUrl).Is(UrlValidSimbolsMask).Description(UrlValidSimbolsMask).FieldTitle(ValidationResources.PageCustomUrl_FieldTitle)
                          .Mask.Of(o => o.CustomUrl).IsNegative(UrlInvalidSubstringsMask).ErrorMessage(ValidationResources.PageCustomUrl_ConflictsWithSystemUrls)
                          .CustomRule.Of(string.Empty).Is(typeof(CustomUrlUniqueValidationRule)).PinErrorMessageTo(o => o.CustomUrl).ErrorMessage(ValidationResources.PageCustomUrl_NotUnique)
                          .SubRules.Of(o => o.SeoSettings).Is(SeoSettingsModel.ValidationModel);
        }
    }
}


Код: c#
1.
2.
3.
4.
[HttpPost, ValidateToken, InitApplicationHttpContext, ScriptRequestHandleError]
public ActionResult Save(PageJsonModel data)
{
    PageJsonModel.ValidationModel.ThrowIfNotValid(data);


Причём ValidationModel конвертируется в ValidationJsonModel и работает на клиенте, а не только на сервере.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38773263
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
codearticles.ruЧто признать? Нечего там признаваться, я прокомментировал каждый пункт.

То что ты привёл 16687324 -- это не работает, я показал где и почему, и это только по минимумому. самое очевидное так сказать.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38773265
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
codearticles.ruГлупости. IValidatableObject отлично вписывается сюда.

нельзя!
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38773276
codearticles.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hVosttcodearticles.ruЧто признать? Нечего там признаваться, я прокомментировал каждый пункт.

То что ты привёл 16687324 -- это не работает, я показал где и почему, и это только по минимумому. самое очевидное так сказать.
То, что я привел, 100% работает. Вот солюшен .

hVosttcodearticles.ruГлупости. IValidatableObject отлично вписывается сюда.
нельзя!
Можно и нужно.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38773281
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt, ты же знаешь, что МСУ будет вести себя как последнее трепло и тролль, но не признается, что облажался.
Давай не будем его кормить.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38773303
codearticles.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Все мы знаем о насущной тупости скианы, которому нужно всё по 200 раз разжевывать. И даже на 201 раз у него в голове мало что отложится, чтобы понять, что он обычное днище. Давайте все скажем спасибо скиане за его очередную тупость.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38773340
codearticles.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hVostt, объясню, почему IValidatableObject таки лучше, чем Remote. Remote - это чисто mvc-шная залипушка, а IValidatableObject - это DataAnnotations из FW. IValidatableObject и IDataErrorInfo будут работать даже под водой. Это универсальное решение. Но я не против Remote, это тоже хороший способ быстро решить задачу.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38773354
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
codearticles.ru, по тому, как сильно ты хамишь, можно понять степень твоей защитной реакции на то, как ты облажался.

Попробуй как-нибудь перебороть свои комплексы и признать ошибки. А то может и в патологию выродится.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38773376
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
codearticles.ruhVostt, объясню, почему IValidatableObject таки лучше, чем Remote. Remote - это чисто mvc-шная залипушка, а IValidatableObject - это DataAnnotations из FW. IValidatableObject и IDataErrorInfo будут работать даже под водой. Это универсальное решение. Но я не против Remote, это тоже хороший способ быстро решить задачу.

так а кто ж мешает сделать свой атрибут типа Remote? атрибуты явно лучше, чем реализация классом IValidatableObject, так как атрибуты могут применяться множество раз, на разных моделях. реализовывать IValidatableObject -- это крайний случай, которого всеми силами следует избегать, обычно он требуется когда валидация сложная и комплексная, учитывает значения всех или значительной части полей модели. такое требуется крайне редко. и это уж точно не подходит для проверки имени пользователя на валидность. ну просто можно свой атрибут реализовать, если Remote не устраивает. у меня таких разных кастомных атрибутов обычно набирается много, часть из них уже крепко сидит в шаред библиотеке, которая используется в нескольких проектах.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38773387
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt, а вот у нас для одной и той же модели можно применять разную модель валидации (набор правил).
Причём правила могут быть как простые, так и комплексные.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38773392
codearticles.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hVosttcodearticles.ruhVostt, объясню, почему IValidatableObject таки лучше, чем Remote. Remote - это чисто mvc-шная залипушка, а IValidatableObject - это DataAnnotations из FW. IValidatableObject и IDataErrorInfo будут работать даже под водой. Это универсальное решение. Но я не против Remote, это тоже хороший способ быстро решить задачу.

так а кто ж мешает сделать свой атрибут типа Remote? атрибуты явно лучше, чем реализация классом IValidatableObject, так как атрибуты могут применяться множество раз, на разных моделях. реализовывать IValidatableObject -- это крайний случай, которого всеми силами следует избегать, обычно он требуется когда валидация сложная и комплексная, учитывает значения всех или значительной части полей модели. такое требуется крайне редко. и это уж точно не подходит для проверки имени пользователя на валидность. ну просто можно свой атрибут реализовать, если Remote не устраивает. у меня таких разных кастомных атрибутов обычно набирается много, часть из них уже крепко сидит в шаред библиотеке, которая используется в нескольких проектах.
Так в том-то и дело, что не нужны никакие дополнительные атрибуты. Всё отлично ложится в ValidatableObject и IDataErrorInfo, причем самым гибким образом. Да и зачем писать что-то типа Remote, если уже есть Remote. Попахивает идиотизмом. IValidatableObject и IDataErrorInfo это мощный инструмент, подходит на все 100% случаев жизни. Типа проверки на дубликат учетной записи. А кастомные атрибуты и прочая мишура идет в лес. Зачем писать велосипед, когда всё уже есть?
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38773397
codearticles.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
skyANAhVostt, а вот у нас для одной и той же модели можно применять разную модель валидации (набор правил).
Причём правила могут быть как простые, так и комплексные.
Я про это писал выше. Делается n конкретный IValidatableObject моделей и каждая может валидироваться по-отдельности, так и всё вместе. Причем в mvc есть готовый инструмент для форсирования валидации TryValidateModel.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38773415
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
codearticles.ruskyANAhVostt, а вот у нас для одной и той же модели можно применять разную модель валидации (набор правил).
Причём правила могут быть как простые, так и комплексные.
Я про это писал выше. Делается n конкретный IValidatableObject моделей и каждая может валидироваться по-отдельности, так и всё вместе. Причем в mvc есть готовый инструмент для форсирования валидации TryValidateModel.Мимо.

У нас всего два класса, а не N: ViewModel и ValidationModel. Но при этом в разных местах можно применать разные наборы правил (ValidationRules), причём каких угодно.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38773430
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
codearticles.ruТак в том-то и дело, что не нужны никакие дополнительные атрибуты. Всё отлично ложится в ValidatableObject и IDataErrorInfo, причем самым гибким образом. Да и зачем писать что-то типа Remote, если уже есть Remote. Попахивает идиотизмом. IValidatableObject и IDataErrorInfo это мощный инструмент, подходит на все 100% случаев жизни. Типа проверки на дубликат учетной записи. А кастомные атрибуты и прочая мишура идет в лес. Зачем писать велосипед, когда всё уже есть?

затем, что аспекты гибче наследования. атрибуты можно навесить в любых комбинациях на кучу моделей. а одна реализация IValidatableObject так и будет всего лишь одной реализацией для всего лишь одной модели. недостатки такого подхода объяснять?
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38773440
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAhVostt, а вот у нас для одной и той же модели можно применять разную модель валидации (набор правил).
Причём правила могут быть как простые, так и комплексные.

ну мы несколько отличаем простую и бизнес-валидацию. для бизнеса у нас есть провайдер, который встраивается в механизм валидации MVC / WebAPI через инъекцию, а там накачивается через атрибуты или конфигурацию. даже флюент мы не пишем, как у вас, это уж слишком
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38773457
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA,

Код: c#
1.
2.
3.
4.
5.
6.
7.
return factory.CreateValidationModel<PageJsonModel>().Rules
                          .MaxLength.Of(o => o.Name).Is(NameMaxLength).FieldTitle(ValidationResources.PageName_FieldTitle)
                          .MaxLength.Of(o => o.CustomUrl).Is(UrlMaxLength).FieldTitle(ValidationResources.PageCustomUrl_FieldTitle)
                          .Mask.Of(o => o.CustomUrl).Is(UrlValidSimbolsMask).Description(UrlValidSimbolsMask).FieldTitle(ValidationResources.PageCustomUrl_FieldTitle)
                          .Mask.Of(o => o.CustomUrl).IsNegative(UrlInvalidSubstringsMask).ErrorMessage(ValidationResources.PageCustomUrl_ConflictsWithSystemUrls)
                          .CustomRule.Of(string.Empty).Is(typeof(CustomUrlUniqueValidationRule)).PinErrorMessageTo(o => o.CustomUrl).ErrorMessage(ValidationResources.PageCustomUrl_NotUnique)
                          .SubRules.Of(o => o.SeoSettings).Is(SeoSettingsModel.ValidationModel);



выглядит как-то громоздко на мой взгляд и не использует существующую инфраструктуру валидации.

Не вижу особых преимуществ перед:

[MaxLength]
ValidSimbolsMask]
InvalidSubstringsMask]

интересно, почему вы сделали такой выбор
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38773464
codearticles.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
skyANAcodearticles.ruпропущено...

Я про это писал выше. Делается n конкретный IValidatableObject моделей и каждая может валидироваться по-отдельности, так и всё вместе. Причем в mvc есть готовый инструмент для форсирования валидации TryValidateModel.Мимо.

У нас всего два класса, а не N: ViewModel и ValidationModel. Но при этом в разных местах можно применать разные наборы правил (ValidationRules), причём каких угодно.

Прямо. У нас может быть сколько угодно классов. Никто никаких ограничений не накладывает. UserValidationModel, UserEmailValidationModel, UserAccessValidationModel и т.п. И все эти валидационные модели централизованно пляшут от IValidatableObject.

hVosttcodearticles.ruТак в том-то и дело, что не нужны никакие дополнительные атрибуты. Всё отлично ложится в ValidatableObject и IDataErrorInfo, причем самым гибким образом. Да и зачем писать что-то типа Remote, если уже есть Remote. Попахивает идиотизмом. IValidatableObject и IDataErrorInfo это мощный инструмент, подходит на все 100% случаев жизни. Типа проверки на дубликат учетной записи. А кастомные атрибуты и прочая мишура идет в лес. Зачем писать велосипед, когда всё уже есть?

затем, что аспекты гибче наследования. атрибуты можно навесить в любых комбинациях на кучу моделей. а одна реализация IValidatableObject так и будет всего лишь одной реализацией для всего лишь одной модели. недостатки такого подхода объяснять?
Что может быть гибче прямого кодирования в реализации аннотаций? Причем, у нас не обязательно одна IValidatableObject, их может быть 10. И работать они могут по одной, две, три или сразу все вместе. В зависимости от потребностей. Декомпозируй как хочешь. Никаких левых атрибутов. Всё штатно и прозрачно.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38773469
codearticles.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
И самое главное, о чем все как-то забыли. Никакой логики исключений для валидации модели! За исключение - кастрация без суда и следствия. Дада.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38773470
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
codearticles.ruДекомпозируй как хочешь.

Как ты собираешься декомпозировать, если они прибиты к своим моделям?

Вот есть атрибут [Required], давай выбросим и напишем IValidatableObject для этих целей. Покажешь пример? А то что-то не догоняю, может ты и прав, на помойку эти атрибуты.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38773472
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
codearticles.ruЗа исключение - кастрация без суда и следствия. Дада.


Вот здеся согласен полностью на все 100%. Ещё бы рук лешить для верности.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38773525
codearticles.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hVosttcodearticles.ruДекомпозируй как хочешь.

Как ты собираешься декомпозировать, если они прибиты к своим моделям?

Вот есть атрибут [Required], давай выбросим и напишем IValidatableObject для этих целей. Покажешь пример? А то что-то не догоняю, может ты и прав, на помойку эти атрибуты.
Ну вот скиана захотел реализовать отдельно проверку на существование учетки. Ему не нравится, что нужно сначала заполнить все поля, а потом нажимать кнопку сохранить. И только тогда начинается валидация всей модели. Ему хочется, чтобы валидация на дубликатов учетки шло сразу и не зависимо от обязательности ввода пароля.

Поэтому имеем две модельки

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
public class RegisterViewModel
{
    [Required, EmailAddress, Display(Name = "Email")]
    public string Email { get; set; }

    [Required, DataType(DataType.Password), Display(Name = "Password")]
    [StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)]
    public string Password { get; set; }

    [DataType(DataType.Password), Display(Name = "Confirm password")]
    [Compare("Password", ErrorMessage = "The password and confirmation password do not match.")]
    public string ConfirmPassword { get; set; }
}

public class RegisterEmailViewModel : IValidatableObject
{
    public RegisterViewModel Model { get; set; }

    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
    {
        if (EmailExists(Model.Email))
        {
            yield return new ValidationResult("Такой email уже существует");
        }
    }
}



Причем, вторую модель RegisterEmailViewModel мы можем валидировать как через ModelState (удобно для случаев аяксов), так и через TryValidateModel в контроллере при посте всей формы. Идею понял?
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38773544
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще-то это hVostt изначально хотел на лету подсказывать пользователю, что логин занят и предлагать свободные варианты.
А Алексей задал вопрос как этот запрос реализовать.
...
Рейтинг: 0 / 0
MVC: обработка исключения в контроллере
    #38773548
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
codearticles.ru, я же хотел код, после того как ты сказал, что это как два пальца об асфальт, хоть аяксом, хоть без.
...
Рейтинг: 0 / 0
25 сообщений из 406, страница 15 из 17
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / MVC: обработка исключения в контроллере
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]