Форум программистов, компьютерный форум, киберфорум
Наши страницы

C# ASP.NET MVC

Войти
Регистрация
Восстановить пароль
 
ilunyasha
0 / 0 / 0
Регистрация: 21.10.2015
Сообщений: 8
#1

Не корректно работает captcha в ASP MVC 3 - C# MVC

02.11.2015, 22:40. Просмотров 430. Ответов 8
Метки нет (Все метки)

Добрый вечер! Помогите, пожалуйста, разобраться, почему не корректно работает captcha. Выводится при регистрации, если не вводить. не верно вводить, регистрация не проходит,НО! сообщения об ошибке или успешном введении значения не выводит! а именно эти: TempData["Message"] = "Message: captcha is valid." и TempData["ErrorMessage"] = "Error: captcha is not valid.". Уверена, что допустила какую-то до боли глупую ошибку, но не могу найти!!



Как внедряла:
установила с помощью Nu GET CaptchaMVC
Контроллер:
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
34
35
//...
public class AccountController : Controller
    { // POST: /Account/Register
 
        [HttpPost]
        public ActionResult Register(RegisterModel model, string empty )
        {
 
            if (this.IsCaptchaValid("Captcha is not valid"))
            {
                TempData["Message"] = "Message: captcha is valid.";
            }
            if (ModelState.IsValid)
            {
                // Attempt to register the user
                MembershipCreateStatus createStatus;
                Membership.CreateUser(model.UserName, model.Password, model.Email, "question", "answer", true, null, out createStatus);
 
                if (createStatus == MembershipCreateStatus.Success)
                {
                    MigrateShoppingCart(model.UserName);
                    FormsAuthentication.SetAuthCookie(model.UserName, false /* createPersistentCookie */);
 
                    return RedirectToAction("Index", "Home");
                }
                else
                {
                    ModelState.AddModelError("", ErrorCodeToString(createStatus));
                }
 
                TempData["ErrorMessage"] = "Error: captcha is not valid.";
            }
            // If we got this far, something failed, redisplay form
            return View(model);
        }
Модель:
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
 public class RegisterModel
    {
        [Required]
        [Display(Name = "User name")]
        public string UserName { get; set; }
 
        [Required]
        [DataType(DataType.EmailAddress)]
        [Display(Name = "Email address")]
        public string Email { get; set; }
 
        [Required]
        [StringLength(100,ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)]
        [DataType(DataType.Password)]
        [Display(Name = "Password")]
        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; }
 
        [Required]
        [DataType(DataType.PhoneNumber)]
        public string Phone { get; set; }
 
    }
Вьюшка:
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
@model MvcCosmeticsStore.Models.RegisterModel
@using CaptchaMvc.HtmlHelpers
@{
    ViewBag.Title = "Register";
}
<h2>
    Create a New Account</h2>
<p>
    Use the form below to create a new account.
</p>
<p>
    Passwords are required to be a minimum of @Membership.MinRequiredPasswordLength
    characters in length.
</p>
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
@using (Html.BeginForm())
{
    @Html.ValidationSummary(true, "Account creation was unsuccessful. Please correct the errors and try again.")
    <div>
        <fieldset>
            <legend>Account Information</legend>
            <div class="editor-label">
                @Html.LabelFor(m => m.UserName)
            </div>
            <div class="editor-field">
                @Html.TextBoxFor(m => m.UserName)
                @Html.ValidationMessageFor(m => m.UserName)
            </div>
            <div class="editor-label">
                @Html.LabelFor(m => m.Email)
            </div>
            <div class="editor-field">
                @Html.TextBoxFor(m => m.Email)
                @Html.ValidationMessageFor(m => m.Email)
            </div>
            <div class="editor-label">
                @Html.LabelFor(m => m.Password)
            </div>
            <div class="editor-field">
                @Html.PasswordFor(m => m.Password)
                @Html.ValidationMessageFor(m => m.Password)
            </div>
            <div class="editor-label">
                @Html.LabelFor(m => m.ConfirmPassword)
            </div>
            <div class="editor-field">
                @Html.PasswordFor(m => m.ConfirmPassword)
                @Html.ValidationMessageFor(m => m.ConfirmPassword)
            </div>
            <div class="editor-label">
                @Html.LabelFor(m => m.Phone)
            </div>
            <div class="editor-field">
                @Html.TextBoxFor(m => m.Phone)
                @Html.ValidationMessageFor(m => m.Phone)
            </div>
            <div class="editor-field">
                @Html.Captcha("Update", "Enter security code:", 5, "Required field", true)
            </div>
            <p>
                <input type="submit" value="Register" />
            </p>
        </fieldset>
    </div>
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.11.2015, 22:40
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Не корректно работает captcha в ASP MVC 3 (C# MVC):

ASP.NET MVC 4,ASP.NET MVC 4.5 и ASP.NET MVC 5 большая ли разница между ними? - C# MVC
Начал во всю осваивать технологию,теперь хочу с книжкой посидеть и вдумчиво перебрать всё то что увидел,услышал и набил...в общем какую...

asp.net mvc 2 проект, работает без контроллеров и моделей. Такое возможно? - C# MVC
Здравствуйте. Я новичек в MVC. Есть чужой проект, в нем не было файла проекта (sln, csproj). Создал новый проект, добавил туда все...

связь MVC и MVVM. Трудно ли освоить mvc параллельно с изучением ASP.NET - C# ASP.NET
Здравствуйте, начал изучать ASP.NET для курсовой работы. Начал читать &quot;Мак-Дональд М., Фримен А., Шпушта М. Microsoft ASP.NET 4 с примерами...

ASP.net MVC против MVC обычного - C# MVC
Здраствуйте, читая книгу &quot;Сандерсон С - ASP.NET MVC3 Framework с примерами на C# для профессионалов&quot; я заметил что описание архитектуры MVC...

Стоит ли изучать asp.net mvc 4 из за скорого выхода asn.net mvc vNext ? - C# MVC
Доброго вечера! Как я узнал, Microsoft скоро планирует выпустить новый веб-фреймворк с названием vNext который позиционируется как...

.NET 4.x Client ASP.NET MVC + Angular и Server side ASP.NET WEB.API - C# ASP.NET
Доброго времени суток! Не первый день бьюсь над задачей, не могу понять в чем причина. Хочу создать почти HelloWorld решение, для...

8
IamRain
1171 / 1087 / 268
Регистрация: 02.08.2011
Сообщений: 3,208
02.11.2015, 23:46 #2
Цитата Сообщение от ilunyasha Посмотреть сообщение
if (this.IsCaptchaValid("Captcha is not valid"))
Как метод работает? Покажите код. Где на вьюхе капча оторажается? А все, увидел. )

Добавлено через 45 минут
Я не вижу, чтобы где-то во вьюхе у вас использовались данные из TempData. Ведь в случае ошибки метод возвращает ту же самую вьюху.
0
ilunyasha
0 / 0 / 0
Регистрация: 21.10.2015
Сообщений: 8
02.11.2015, 23:51  [ТС] #3
метод взят с CaptchaMvc.dll, с public static class CaptchaHelper, я его сама не писала, просто использовала. Вот как его аргументы отображаются, при F12 -
// Summary:
// Determines whether the captcha is valid, and write error message if need.
//
// Parameters:
// controllerBase:
// The specified System.Web.Mvc.ControllerBase.
//
// errorText:
// The specified error message.
//
// parameters:
// The specified parameters, if any.
//
// Returns:
// True if the captcha is valid; otherwise, false.
public static bool IsCaptchaValid(this ControllerBase controllerBase, string errorText, params ParameterModel[] parameters);

Добавлено через 3 минуты
"Я не вижу, чтобы где-то во вьюхе у вас использовались данные из TempData. Ведь в случае ошибки метод возвращает ту же самую вьюху." - да, не используются...сейчас буду что-то пробовать. Спасибо, Вам, большое, я просто только несколько дней в этом разбираюсь, а сроки очень поджимают.... вот и даю много ошибок((
0
IamRain
1171 / 1087 / 268
Регистрация: 02.08.2011
Сообщений: 3,208
02.11.2015, 23:51 #4
Вы должны использовать ваш TempData во вьюхе. Вставьте вот этот кусок кода куда-нибудь и проверьте:
HTML5
1
2
3
4
 @if(TempData["ErrorMessage"]!=null)
{
  <p>TempData["ErrorMessage"]</p>
}
0
ilunyasha
0 / 0 / 0
Регистрация: 21.10.2015
Сообщений: 8
02.11.2015, 23:59  [ТС] #5
нет, не работает работает вот это только: @Html.Captcha("Update", "Enter security code:", 5, "Required field", true)
очень странно(((
дописала как Вы посоветовали:
<div class="editor-field">
@Html.Captcha("Update", "Enter security code:", 5, "Required field", true)
@if (TempData["ErrorMessage"] != null)
{
<p>
TempData["ErrorMessage"]</p>
}
</div>
0
IamRain
1171 / 1087 / 268
Регистрация: 02.08.2011
Сообщений: 3,208
03.11.2015, 00:32 #6
Сейчас точно не могу сказать, в чем проблема.
Вообще именно эта капча не самая подходящая в плане типизации, потому что по-хорошему валидация должна проводиться над моделью.
Как вариант, можно просто добавлять ошибки в ModelState - так было бы более правильно. Я бы немного переписал ваш метод:
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
[HttpPost]
        public ActionResult Register(RegisterModel model, string empty )
        {
           // сначала валидируем основные данные модели
           if (!ModelState.IsValid)    
              return View(model);
            
           // если ок - проблемную капчу
           if (!IsCaptchaValid("Captcha is not valid")) 
          { 
            ModelState.AddModelError("Captcha", "Captcha is not valid")    
            return View(model);
           }           
            
                // Attempt to register the user
                MembershipCreateStatus createStatus;
                Membership.CreateUser(model.UserName, model.Password, model.Email, "question", "answer", true, null, out createStatus);
 
                if (createStatus != MembershipCreateStatus.Success)
                   {                      
                    ModelState.AddModelError("", ErrorCodeToString(createStatus));
                    return View(model);
                    }
 
                    MigrateShoppingCart(model.UserName);
                    FormsAuthentication.SetAuthCookie(model.UserName, false /* createPersistentCookie */); 
                    return RedirectToAction("Index", "Home");    
                         
        }
}
Добавлено через 2 минуты
В модели добавить свойство, скажем string типа с именем "Сaptcha".
И во вьюхе добавьте в нужном месте: @Html.ValidationMessageFor(m => m.Captcha). // либо использовать формат метода, принимающий строку "Сaptcha"

Добавлено через 10 минут
Можно использовать также google-captcha, она более надежная в плане отсеивания ботов.
Либо где-то на codeplex-e поищите, одна точно была, какой-то индиец писал, только там нужно немного исходники править под себя. Позже кину ссылку, если найду.
1
ilunyasha
0 / 0 / 0
Регистрация: 21.10.2015
Сообщений: 8
03.11.2015, 00:42  [ТС] #7
Попробовала как описано выше, не получается(( Во первых не воспринимает !IsCaptchaValid, только this.IsCaptchaValid ghjgecrfn, а во-вторых, теперь и картинки с каптчей нет, нигде она не генерируется)))) Да мне, если честно , показалось, что google-captcha посложнее, чем эта, а мне очень хочется во всем разобраться, чтобы я могла защитить свой проект. Но, я Вам очень-чень благоарна, за помощь) спасибо!)) Буду завтра опять что-то пытаться делать, переделывать и т.д.))
0
IamRain
1171 / 1087 / 268
Регистрация: 02.08.2011
Сообщений: 3,208
03.11.2015, 00:46 #8
Цитата Сообщение от ilunyasha Посмотреть сообщение
нигде она не генерируется
Значит, хелпер Html.Captcha где-то внутри использует TempData. Завтра(уже сегодня) сброшу вам наработки, которые были.
1
ilunyasha
0 / 0 / 0
Регистрация: 21.10.2015
Сообщений: 8
03.11.2015, 00:50  [ТС] #9
IamRain, Спасибо! Буду очень ждать)
0
03.11.2015, 00:50
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.11.2015, 00:50
Привет! Вот еще темы с ответами:

Стоит ли изучать ASP.NET MVC 4 не зная просто ASP.NET? - C# MVC
Стоит ли сразу изучать ASP.NET MVC не зная просто ASP.NET? И еще вопрос: мне нужно освоить MVC 4, но по нему не так много учебного...

Наследование в asp mvc - C# MVC
Никак не выходит найти информацию по теме наследования. (ASP.Net начал учить совсем недавно, фронтенд тоже не шарю, но тем не менее :) ) ...

JS+ASP.NET MVC - C# MVC
Доброго времени суток, возникла следующая проблема. Необходимо реализовать чат на клиенте, чат состоит из обычных формочек html, на сервере...

DropDownList в ASP MVC - C# MVC
Здравствуйте. Есть модель данных public class Book { public int BookId { get; set; } public Category...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru