JS脚本表单发布未针对ASP.NET Request.Form

时间:2018-10-10 13:53:19

标签: javascript asp.net

我有几个用户控件,其中一个需要单击才能转到另一个页面。我有一个被调用的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();
}

2 个答案:

答案 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吗?