首页 > 解决方案 > JS 脚本表单帖子未显示为 ASP.NET Request.Form

问题描述

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

标签: javascriptasp.net

解决方案


在我发表评论后,我从您的编辑中测试了以下简化片段。

<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?


推荐阅读