我有几个用户控件,其中一个需要单击才能转到另一个页面。我有一个被调用的javascript函数,其中包含警报,我知道它发布了正确的数据。同样,此Javascript调用可与其他网站一起使用,并且工作正常,但它们未处理用户控件。用户控件调用ShowNotes,但是将其发布到带有site.master页面的常规表单页面。我以为我想念一些简单的东西,所以请客气,让我知道我想念的东西。
function ShowNotes(appName, serverName, appDataID) {
var params = [];
params.push({
AppName: appName,
ServerName: serverName,
AppDataID: appDataID
});
formPost("/Notes.aspx", params);
}
function formPost(url, params) {
var form = document.createElement("form");
form.setAttribute("method", "post");
form.setAttribute("name", "hiddenForm");
form.setAttribute("action", url);
var hiddenField;
for (var key in params) {
for (var val in params[key]) {
hiddenField = document.createElement("input");
hiddenField.setAttribute("type", "hidden");
hiddenField.setAttribute("name", val);
hiddenField.setAttribute("value", params[key][val]);
form.appendChild(hiddenField);
//alert(val + ": " + params[key][val]);
}
}
document.body.appendChild(form);
form.submit();
}
然后在Notes.aspx端,我调试并显示Request.Form.Count =0。我可能会丢失什么?我还查看了request.QueryString,它为空。
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
if (Request.Form.Count > 0)
{
编辑:
基于VDWWD注释,我修改了该方法以检查是否存在一种表单并使用该表单。我仍然得到相同的结果。
function formPost(url, params) {
var form = document.forms[0];
if (form == undefined) {
form = document.createElement("form");
form.setAttribute("name", "hiddenForm");
form.setAttribute("id", "hiddenForm");
}
alert(form.id);
form.setAttribute("method", "post");
form.setAttribute("action", url);
var hiddenField;
for (var key in params) {
for (var val in params[key]) {
hiddenField = document.createElement("input");
hiddenField.setAttribute("type", "hidden");
hiddenField.setAttribute("name", val);
hiddenField.setAttribute("value", params[key][val]);
form.appendChild(hiddenField);
//alert(val + ": " + params[key][val]);
}
}
document.body.appendChild(form);
form.submit();
}
答案 0 :(得分:0)
我开始研究“ 301永久移动”,发现有人指出,要将帖子更改为不带扩展名的页面。 301正在重定向不带扩展名的页面,导致POST数据无法传递。
因此,我更改了JavaScript以删除.aspx,并在其中放置了斜线,即使通过ASPX页面也可以使用它:
function ShowNotes(appName, serverName, appDataID) {
var params = [];
params.push({
AppName: appName,
ServerName: serverName,
AppDataID: appDataID
});
formPost("/Notes/", params);
}
答案 1 :(得分:0)
评论后,我从您的修改中测试了以下简化代码段。
<script type="text/javascript">
function formPost(url, params) {
var form = document.forms[0];
form.setAttribute("method", "post");
form.setAttribute("action", '/default.aspx');
hiddenField = document.createElement("input");
hiddenField.setAttribute("type", "hidden");
hiddenField.setAttribute("name", 'FormPostTest');
hiddenField.setAttribute("value", "TheValueOfTheHiddenField");
form.appendChild(hiddenField);
form.submit();
}
</script>
在Default.aspx
上,我使用此Request.Form["FormPostTest"]
检索值,并且工作正常。即使帖子页面与页面不同,表单仍处于打开状态。
确定要发布到正确的页面并使用正确的name
吗?