Наскоро получих обратна връзка от колега относно моя изходен код на уебсайт. Той казва, че е лоша практика да не се справяте елегантно с това, което визуалният интерфейс не позволява.
Тъй като не е много ясно, ето един пример.
Да кажем, че посетител може да коментира нещо.
- Коментарът се записва в база данни в колона
nvarchar(500)
. - Дължината на полето
<input />
е ограничена до 500.
Но, разбира се, нищо не забранява на по-напреднал потребител да деактивира ограничението за дължина и да въведе 501 символа.
(Други примери: подаване на опция, която дори не съществува в <select />
. Но има има изящна грешка, когато потребителят бъде помолен да въведе число, а тя въведе вместо това не е число, тъй като събитията на натискане на клавиши се контролират чрез JavaScript и JavaScript може да бъде деактивиран)
Ако посетителят го направи, ще има провал на ниво кодови договори. Заявката AJAX ще се провали с неочаквана грешка (или при изпращане на страницата ще има неочаквана грешка). Във всички случаи посетителят ще види, че се е случило нещо нередно, но няма да има изящно съобщение, указващо, че дължината на изпратения коментар е твърде дълга.
Защо е лоша практика? Защо да си правя труда да проектирам ясни и изрични съобщения за грешка за случаите, когато посетителят, който използва правилно уебсайта, никога няма да има?
Забележка: Разбирам, че е гадно да се показва подробна грешка на .NET Framework и проследяване на стека, когато се случи нещо подобно. Ако го направя, това е сериозен проблем със сигурността. Но в моя случай има само AJAX отговор с нещо много общо или пренасочване към обща страница с извинения за грешка.
Използвам DropDownListFor според моя изглед:
Имам и функция JQuery във файл със скриптове .js, който вече е включен в заглавката ми и всичко:
Искам да извикам „GetRequiredFields“ с параметър „type“ като стойност на избрания елемент при избор и да го използвам за актуализиране на „div“, наречен „RequiredFields“. Как мога да направя това? Трябва ли да използвам нещо различно от Html.DropDownListFor?
- person xil3   schedule 14.01.2011If the visitor does so, there would be a failure on code contracts level. The AJAX request would fail with an unexpected error (or, on page submit, there will be an unexpected error).
- не трябва да е „неочаквана“ грешка, ако е валидирана в задната част. Ако е изпратено чрез AJAX с 501, задната част трябва да го обработва правилно, а не просто да се провали. - person xil3   schedule 14.01.2011