У меня есть веб-сайт на основе MVC 2 с контактной формой, на которой есть изображение CAPTCHA для защиты от спама.
После заполнения большей части формы пользователь решает, что он / она не может прочитать изображение, поэтому яесть кнопка, которая позволяет пользователю обновить страницу с другим изображением.Это приводит к полной перезагрузке страницы (с этим у меня все в порядке).
Я хочу, чтобы вся страница загружалась с существующими данными, оставаясь и просто отображала другое изображение.
Так как жеЯ вызываю действие, которое сохраняет значения и не запускает проверку?
Теперь у меня проблема в том, что ... 1. Как разрешить выполнение публикации без запуска проверки?2. Как мне сохранить значения формы?
Меня не интересуют решения AJAX, и меня не интересует reCAPTCHA.
Спасибо.Дан.
ОБНОВЛЕНИЕ - думаю, у меня есть решение - обратная связь приветствуется!
// All buttons on a form are post to the same action method so read in the value of the submit buttons to take appropriate action.
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult sendlink(BusinessLinkModel linkToCreate, string button)
{
// Validation logic
if (string.IsNullOrWhiteSpace(linkToCreate.BusinessTitle)) ModelState.AddModelError("BusinessTitle", "Business title is required.");
string submitButtonName = button;
// If we want to "reload" the captcha image, then we'll clear all the errors, do nothing with the data but update the session so the image
// is re-generated appropriately.
if (submitButtonName == "reload")
{
// Clear the errors - hacktastic!
foreach (ModelState item in this.ModelState.Values.ToList())
{
item.Errors.Clear();
}
ResetSecurityCode();
}
return View();
}
// This is the image url i.e. /home/GenerateSecurityImage
[AcceptVerbs(HttpVerbs.Get)]
public ActionResult GenerateSecurityImage()
{
string code = Session["CAPTCHA_Contact"] == null ? ResetSecurityCode() : Session["CAPTCHA_Contact"].ToString();
Response.ContentType = "image/jpeg";
GenerateImage(code, 180, 70).Save(Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg);
Response.End();
return View();
}