Asp.net mvc 3 在JQUERY对话框上刷新Captcha图像

Asp.net mvc 3 在JQUERY对话框上刷新Captcha图像,asp.net-mvc-3,jquery,Asp.net Mvc 3,Jquery,我在下面有一个jquerymodel拨号框。当用户单击页面上的某个链接时,将显示带有验证码的对话框。当用户输入无效的captch时,应刷新captch图像并显示新文本。但这并没有发生。下面是代码片段: <div id="model"> <img id="captchaImage" src="@Url.Content("~/CaptchaImage.ashx?text=" + ViewBag.EncryptedCaptcha)" /> <in

我在下面有一个jquerymodel拨号框。当用户单击页面上的某个链接时,将显示带有验证码的对话框。当用户输入无效的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控制器。控制器返回包装在JSON对象验证码中的isCpatchValid和encryptedText。我做了一个下面的如果 验证码文本无效:

$(“#captchaImage”).attr(“src”,“~/captchaImage.ashx?text=”+ 验证码(加密文本)

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

有人能帮我刷新Jauery对话框上的验证码图像吗。

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)