Сообщение формы MVC для обновления изображения - PullRequest
0 голосов
/ 11 января 2011

У меня есть веб-сайт на основе 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();
}

1 Ответ

0 голосов
/ 12 января 2011

Если вы делаете повторный захват, вам нужно создать специальное действие для этой

public ActionResult Recapture(Model m)
{
   // reinit capture

   return View("yourForm", m);
}

yourForm - формы, которую вы изначально отображаете для пользователя.Если m инициализируется с некоторыми значениями, они будут отображаться в форме.Если Model.IsValid не вызывается, это не приведет к проверке.

...