有时候在写web 应用的时候,需要临时动态构造一个form 并提交,form 里面的参数以及action,以及是post请求还是get请求,甚至form 的样式都是可以指定的,用原生的javascript 可以做到,这里用jquery做了一个测试。我自己测试的是构造一个分页的post请求, 为了防止csrf 攻击,加入了csrf 验证,不需要的可以去掉。
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
<script type="text/javascript" src="jquery-1.8.3.js"></script>
<script type="text/javascript">
function genSearchObj(url, page, pageSize, keyword) {
var params = {};
params.url = url;
params.page = page;
params.pageSize = pageSize;
params.cond = keyword;
return params;
}
function mockFormSubmit(params) {
var form = $('<form />', { action: params.url, method: "post", style: "display:none;" }).appendTo('body');
$.each(params, function (k, v) {
if (k != "url") {
form.append('<input type="hidden" name="' + k + '" value="' + v + '" />');
}
});
form.append('<input type="hidden" name="csrfToken" value="' + $("#csrf_token").val() + '" />');
form.submit();
} function sender() {
var params = genSearchObj("ajax.ashx", 1, 10, "zzy");
mockFormSubmit(params);
}
</script>
</head>
<body>
<input id="btn_action" type="button" value="action" onclick="sender();" />
</body>
</html>
public class ajax : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
string temp4 = context.Request.Form["page"];
string temp5 = context.Request.Form["pageSize"];
string temp6 = context.Request.Form["cond"]; context.Response.ContentType = "text/plain";
context.Response.Write(temp4 + temp5 + temp6);
}
public bool IsReusable
{
get
{
return false;
}
}
}
源代码下载:http://files.cnblogs.com/files/OnlyDreams/WebApplication1.zip
参考:http://ju.outofmemory.cn/entry/126161