使用jquery刷新Captcha图像
Refresh Captcha image with jquery
我在剃刀页面上有一个HTML
图像标签。此图显示生成的captcha。我添加了一些jquery,以便在单击此图像时刷新它。这在我的电脑上有效,但一旦我将其发布到服务器,点击图像时就不会发生任何事情。
<img id="captcha-image" src="@Url.Action("Captcha", "Home")" />
...
$("#captcha-image").click(function () {
this.src = "@Url.Action("Captcha", "Home")";
});
编辑:
我已经确定发生这种情况是因为浏览器可能缓存了图像。现在我想在GET请求中发送一个随机数,这样浏览器缓存就不会否定我的努力。
现在的问题是如何在适当的地方获得随机数:
$("#captcha-image").click(function () {
this.src = "@Url.Action("Captcha", "Home", new { r = System.Random.Next() })";
});
这将不起作用,因为Next()
在System.Random
中不是一个静态方法,并且我需要一个Random
对象来引用才能使用它
我还尝试使用JavaScript随机方法:
$("#captcha-image").click(function () {
var randomNumber = Math.floor(Math.random());
this.src = "@Url.Action("Captcha", "Home", new { r = randomNumber})";
});
这里的问题是变量randomNumber
在@Url.Action
中的c#代码块的作用域中不可见。
您可以使用replace更改带有其值的randomNumber字符串,也可以将外部双引号更改为单引号,并将randomNumber传递给匿名对象初始值设定项。
this.src = '@Url.Action("Captcha", "Home", new { randomNumber = "_randomNumber_"})'.replace("_randomNumber_", randomNumber );
另一种方法可以是将服务器端代码与javascript连接起来,使查询字符串
this.src = '@Url.Action("Captcha", "Home")?randomNumber' + randomNumber ;
//Put This one Partial view
<img src="@Url.Action("GetCaptchaImage", "Vulpith_Public",new { dt=@DateTime.Now},Request.Url.Scheme)" />
//And call ajax from this partial view as following
function Captcharefresh() {
$.ajax({
url: "../Vulpith_Public/_GetCaptcha",
type: "post",
dataType: "html",
data: {},
success: function (data) {
$('#codeRefresh').html(data)
},
error: function (data) {
}
});
}
//and create actions as following
public FileResult GetCaptchaImage(DateTime dt)
{
CaptchaRandomImage CI = new CaptchaRandomImage();
this.Session["CaptchaImageText"] = CI.GetRandomString(5); // here 5 means I want to get 5 char long captcha
//CI.GenerateImage(this.Session["CaptchaImageText"].ToString(), 300, 75);
// Or We can use another one for get custom color Captcha Image
CI.GenerateImage(this.Session["CaptchaImageText"].ToString(), 300, 75, Color.DarkGray, Color.White);
MemoryStream stream = new MemoryStream();
CI.Image.Save(stream, ImageFormat.Png);
stream.Seek(0, SeekOrigin.Begin);
return new FileStreamResult(stream, "image/png");
}
//One more action as
[HttpPost]
public ActionResult _GetCaptcha()
{
return PartialView();
}
相关文章:
- 如何使用url加载程序在webpack中导入多个图像
- nodejs-expressjs上传图像并显示它们
- 使用JSP从服务器检索和显示图像
- 角度:在ng重复上切换图像
- 客户端服务器REST API captcha实现
- 画廊图像未显示
- Phonegap-(安卓/iphone)多个图像的图像库出现问题
- Javascript排序的图像弹出窗口..可以't单独弹出
- 画布数据到图像
- Windows8应用程序(html&Javascript):从图片库(除了文件选择器)显示图像的另一种方式
- 使图像在单击时展开到不大于浏览器
- Html页面上的多个Base64图像和平滑加载
- 我如何修复包含在captcha的addthis中的错误
- UIAutomation放大图像
- 使用javascript在Flash中加载外部图像
- 可以在这里为背景图像设置滤镜吗
- Wordpress cforms插件CAPTCHA图像未显示
- 生成您自己的captcha与生成图像
- jQuery在加载前捕获Captcha图像或在加载后获取图像文件内容
- 使用jquery刷新Captcha图像