MVC表单帖子刷新图像

时间:2011-01-11 20:48:01

标签: asp.net-mvc image refresh

我有一个基于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 :(得分:0)

如果你重新夺回,你必须为那个

创建一个特殊的行动
public ActionResult Recapture(Model m)
{
   // reinit capture

   return View("yourForm", m);
}

yourForm - 您最初向用户显示的表单。如果使用某些值初始化m,则它们将显示在表单上。如果未调用Model.IsValid,则不会导致验证。