asp.net中服务器表单中的简单表单?

时间:2011-07-04 09:26:53

标签: asp.net

我有一个奇怪的情况......(像我这样的初学者不熟悉专家:)

在我的网站上,我有:

<form runat="server">
  <!--some user controls-->
  <form action="http://gramma.us1.list-manage.com/subscribe/post?u=64d2cf63fb98f334f406892db&amp;id=f3181fb3be" method="post">
  <!-- rest of newsletter code -->
  </form>
   <!--other user controls-->
</form>

如您所见,该嵌套表单来自邮件黑猩猩时事通讯订阅HTML代码的一些生成代码。

当然,这不起作用。 (页面已成功呈现,但表单发布不起作用)

问题是:

  • 这是使这个嵌套表单工作的解决方法吗?我不能在页面中使用多个runat="server"表单来将主表单与嵌套表单分开...

更新

来自邮件黑猩猩的整个代码...

    <div id="mc_embed_signup">
<form action="http://gramma.us1.list-manage1.com/subscribe/post?u=64d2cf63fb98f334f406892db&amp;id=f3181fb3be" method="post" id="mc-embedded-subscribe-form" name="mc-embedded-subscribe-form" class="validate" target="_blank" style="font: normal 100% Arial, sans-serif;font-size: 10px;">
    <fieldset style="-moz-border-radius: 4px;border-radius: 4px;-webkit-border-radius: 4px;border: 1px solid #ccc;padding-top: 1.5em;margin: .5em 0;background-color: #fff;color: #000;text-align: left;">
    <legend style="white-space: normal;text-transform: capitalize;font-weight: bold;color: #000;background: #fff;padding: .5em 1em;border: 1px solid #ccc;-moz-border-radius: 4px;border-radius: 4px;-webkit-border-radius: 4px;font-size: 1.2em;"><span>join our mailing list</span></legend>
<div class="indicate-required" style="text-align: right;font-style: italic;overflow: hidden;color: #000;margin: 0 9% 0 0;">* indicates required</div>
<div class="mc-field-group" style="margin: 1.3em 5%;clear: both;overflow: hidden;">
<label for="mce-EMAIL" style="display: block;margin: .3em 0;line-height: 1em;font-weight: bold;">Adresa de e-mail <strong class="note-required">*</strong>
</label>
<input type="text" value="" name="EMAIL" class="required email" id="mce-EMAIL" style="margin-right: 1.5em;padding: .2em .3em;width: 90%;float: left;z-index: 999;">
</div>
        <div id="mce-responses" style="float: left;top: -1.4em;padding: 0em .5em 0em .5em;overflow: hidden;width: 90%;margin: 0 5%;clear: both;">
            <div class="response" id="mce-error-response" style="display: none;margin: 1em 0;padding: 1em .5em .5em 0;font-weight: bold;float: left;top: -1.5em;z-index: 1;width: 80%;background: FBE3E4;color: #D12F19;"></div>
            <div class="response" id="mce-success-response" style="display: none;margin: 1em 0;padding: 1em .5em .5em 0;font-weight: bold;float: left;top: -1.5em;z-index: 1;width: 80%;background: #E3FBE4;color: #529214;"></div>
        </div>
        <div><input type="submit" value="Subscribe" name="subscribe" id="mc-embedded-subscribe" class="btn" style="clear: both;width: auto;display: block;margin: 1em 0 1em 5%;"></div>
    </fieldset> 
    <a href="#" id="mc_embed_close" class="mc_embed_close" style="display: none;">Close</a>
</form>
</div>
<script type="text/javascript">
    var fnames = new Array(); var ftypes = new Array(); fnames[0] = 'EMAIL'; ftypes[0] = 'email'; fnames[1] = 'FNAME'; ftypes[1] = 'text';
    try {
        var jqueryLoaded = jQuery;
        jqueryLoaded = true;
    } catch (err) {
        var jqueryLoaded = false;
    }
    var head = document.getElementsByTagName('head')[0];
    if (!jqueryLoaded) {
        var script = document.createElement('script');
        script.type = 'text/javascript';
        script.src = 'http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js';
        head.appendChild(script);
        if (script.readyState && script.onload !== null) {
            script.onreadystatechange = function () {
                if (this.readyState == 'complete') mce_preload_check();
            }
        }
    }
    var script = document.createElement('script');
    script.type = 'text/javascript';
    script.src = 'http://downloads.mailchimp.com/js/jquery.form-n-validate.js';
    head.appendChild(script);
    var err_style = '';
    try {
        err_style = mc_custom_error_style;
    } catch (e) {
        err_style = 'margin: 1em 0 0 0; padding: 1em 0.5em 0.5em 0.5em; background: ERROR_BGCOLOR none repeat scroll 0% 0%; font-weight: bold; float: left; z-index: 1; width: 80%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: ERROR_COLOR;';
    }
    var head = document.getElementsByTagName('head')[0];
    var style = document.createElement('style');
    style.type = 'text/css';
    if (style.styleSheet) {
        style.styleSheet.cssText = '.mce_inline_error {' + err_style + '}';
    } else {
        style.appendChild(document.createTextNode('.mce_inline_error {' + err_style + '}'));
    }
    head.appendChild(style);
    setTimeout('mce_preload_check();', 250);

    var mce_preload_checks = 0;
    function mce_preload_check() {
        if (mce_preload_checks > 40) return;
        mce_preload_checks++;
        try {
            var jqueryLoaded = jQuery;
        } catch (err) {
            setTimeout('mce_preload_check();', 250);
            return;
        }
        try {
            var validatorLoaded = jQuery("#fake-form").validate({});
        } catch (err) {
            setTimeout('mce_preload_check();', 250);
            return;
        }
        mce_init_form();
    }
    function mce_init_form() {
        jQuery(document).ready(function ($) {
            var options = { errorClass: 'mce_inline_error', errorElement: 'div', onkeyup: function () { }, onfocusout: function () { }, onblur: function () { } };
            var mce_validator = $("#mc-embedded-subscribe-form").validate(options);
            $("#mc-embedded-subscribe-form").unbind('submit'); //remove the validator so we can get into beforeSubmit on the ajaxform, which then calls the validator
            options = { url: 'http://gramma.us1.list-manage.com/subscribe/post-json?u=64d2cf63fb98f334f406892db&id=f3181fb3be&c=?', type: 'GET', dataType: 'json', contentType: "application/json; charset=utf-8",
                beforeSubmit: function () {
                    $('#mce_tmp_error_msg').remove();
                    $('.datefield', '#mc_embed_signup').each(
                            function () {
                                var txt = 'filled';
                                var fields = new Array();
                                var i = 0;
                                $(':text', this).each(
                                    function () {
                                        fields[i] = this;
                                        i++;
                                    });
                                $(':hidden', this).each(
                                    function () {
                                        if (fields.length == 2) fields[2] = { 'value': 1970 }; //trick birthdays into having years
                                        if (fields[0].value == 'MM' && fields[1].value == 'DD' && fields[2].value == 'YYYY') {
                                            this.value = '';
                                        } else if (fields[0].value == '' && fields[1].value == '' && fields[2].value == '') {
                                            this.value = '';
                                        } else {
                                            this.value = fields[0].value + '/' + fields[1].value + '/' + fields[2].value;
                                        }
                                    });
                            });
                    return mce_validator.form();
                },
                success: mce_success_cb
            };
            $('#mc-embedded-subscribe-form').ajaxForm(options);

        });
    }
    function mce_success_cb(resp) {
        $('#mce-success-response').hide();
        $('#mce-error-response').hide();
        if (resp.result == "success") {
            $('#mce-' + resp.result + '-response').show();
            $('#mce-' + resp.result + '-response').html(resp.msg);
            $('#mc-embedded-subscribe-form').each(function () {
                this.reset();
            });
        } else {
            var index = -1;
            var msg;
            try {
                var parts = resp.msg.split(' - ', 2);
                if (parts[1] == undefined) {
                    msg = resp.msg;
                } else {
                    i = parseInt(parts[0]);
                    if (i.toString() == parts[0]) {
                        index = parts[0];
                        msg = parts[1];
                    } else {
                        index = -1;
                        msg = resp.msg;
                    }
                }
            } catch (e) {
                index = -1;
                msg = resp.msg;
            }
            try {
                if (index == -1) {
                    $('#mce-' + resp.result + '-response').show();
                    $('#mce-' + resp.result + '-response').html(msg);
                } else {
                    err_id = 'mce_tmp_error_msg';
                    html = '<div id="' + err_id + '" style="' + err_style + '"> ' + msg + '</div>';

                    var input_id = '#mc_embed_signup';
                    var f = $(input_id);
                    if (ftypes[index] == 'address') {
                        input_id = '#mce-' + fnames[index] + '-addr1';
                        f = $(input_id).parent().parent().get(0);
                    } else if (ftypes[index] == 'date') {
                        input_id = '#mce-' + fnames[index] + '-month';
                        f = $(input_id).parent().parent().get(0);
                    } else {
                        input_id = '#mce-' + fnames[index];
                        f = $().parent(input_id).get(0);
                    }
                    if (f) {
                        $(f).append(html);
                        $(input_id).focus();
                    } else {
                        $('#mce-' + resp.result + '-response').show();
                        $('#mce-' + resp.result + '-response').html(msg);
                    }
                }
            } catch (e) {
                $('#mce-' + resp.result + '-response').show();
                $('#mce-' + resp.result + '-response').html(msg);
            }
        }
    }

</script>
<!--End mc_embed_signup-->

4 个答案:

答案 0 :(得分:2)

我发现最简单的方法是从你的页面中删除邮件黑猩猩表单,并且只有一个asp.net表单,其字段与邮件黑猩猩的字段相同。然后,在按钮单击事件上执行以下操作:

Response.Redirect("MailChimp.aspx?email={0}&name={1}", txtEmail.Text, txtName.Text)

然后,在MailChimp.aspx上,有一个包含邮件黑猩猩动作URL的表单,并填写如下字段:

<input type="text" name="email" value='<%=request("email")' />

然后在页面上放置一些javascript以在页面加载时提交表单。

答案 1 :(得分:0)

  1. 您可以将第二个表单隐藏并显示在表单runat服务器之外。您仍然可以将控件显示在应有的位置,使用javascript可以填充隐藏的表单并发布。当然这非常繁琐。
  2. 检查内部表单是否接受get请求并使用后端代码使用查询字符串中的参数执行Respone.Redirect
  3. 检查您是否确实需要表单来包装整个页面。如果你可以让表单runat服务器只包含真正需要它的控件(那些控件需要回发它们的值(文本框,按钮等))
  4. 您可以拥有一个iframe,并将内部表单置于iframe中。
  5. 不幸的是,这些方法都不是非常漂亮。

答案 2 :(得分:0)

您还可以从回发中直接重定向到mailchimp,将subscribe = 1私有用于新订阅:

      Response.Redirect(string.Format("http://[YOUR URL]/subscribe/post" +
                                  "?u=31da5df49c6d1901c0fca018f&amp;id=c7bb5267ef&EMAIL={0}" +
                                  "&subscribe=1", address));

答案 3 :(得分:0)

这可能会迟到,但我只是在我的asp.net网站上运行了嵌入式mailchimp代码。

我删除了表单标记,并将其输入按钮替换为:

<asp:Button runat="server" PostBackUrl="http://[YOUR URL]/subscribe/post?u=64d2cf63fb98f334f406892db&amp;id=f3181fb3be" Text="Subscribe"/>

它对我来说非常合适。 (我应该注意到我使用的是嵌入式代码的非JavaScript版本。)