0

我在下面有一个jquery 模型对话框。当用户单击页面上的其中一个链接时,会出现带有验证码的对话框。当用户输入无效验证码时,验证码图像应刷新并显示新文本。但这并没有发生。下面是代码片段:

<div id="model">   
    <img id="captchaImage" src="@Url.Content("~/CaptchaImage.ashx?text=" + ViewBag.EncryptedCaptcha)" />  
    <input id="captchText" type="text" value="" />
    <a href="#"id="verfiyCaptcha">Validate</a>
</div>

当用户点击验证时,文本通过$.getJSON发送到 MVC 控制器。控制器返回包装在 JSON 对象 Captcha 中的 isCpatchValid 和 encryptedText。如果验证码文本无效,我会在下面完成:

$("#captchaImage").attr("src", "~/CaptchaImage.ashx?text=" + Captcha.encryptedText);

在 Chrome 调试器上,我可以看到控制器正在返回正确的加密文本。但是上面的这条线并不认为可以刷新 captch 图像。我怀疑这是由于异步调用。

有人可以帮助我如何刷新 Jauery 对话框上的验证码图像。

4

1 回答 1

1

您不能在 javascript 中使用“~”功能。那是 .NET 的事情。您需要将其包装在 .NET 调用中,例如:

attr("src", "@Url.Content("~/CaptchaImage.ashx")?text=" + Captcha.encryptedText)

或者如果这个 JS 在一个单独的文件中,你可以在视图上定义一个变量,然后在 JS 文件中使用它,比如:

** in the view **
var CAPTCHA_IMAGE_URL = "@Url.Content("~/CaptchaImage.ashx")";

** in the JS file **
attr("src", CAPTCHA_IMAGE_URL + "?text=" + Captcha.encryptedText)
于 2012-09-14T22:32:55.907 回答