我有一个基于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();
}
答案 0 :(得分:0)
如果你重新夺回,你必须为那个
创建一个特殊的行动public ActionResult Recapture(Model m)
{
// reinit capture
return View("yourForm", m);
}
yourForm - 您最初向用户显示的表单。如果使用某些值初始化m,则它们将显示在表单上。如果未调用Model.IsValid,则不会导致验证。