我在下面有一个jquery模型对话框框。当用户单击页面上的某个链接时,会出现带有Captcha的对话框。当用户输入无效的captch时,captch图像应刷新并显示新文本。但这并没有发生。以下是代码片段:
<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>
当用户点击Validate时,文本将通过$.getJSON发送到MVC控制器。控制器返回isCpatchValid并加密JSON对象Captcha中包装的文本。如果captcha文本无效:
$("#captchaImage").attr("src","~/captchaImage.ashx?text="+Captcha.encryptedText);
在Chrome调试器上,我可以看到控制器正在返回正确的加密文本。但上面的这句话并不认为是对captch形象的更新。我怀疑这是由于异步调用。
有人能帮我刷新Jauery对话框上的captcha图像吗。
您不能在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)