c#.net表单的回发没有保留1个值

本文关键字:有保留 1个值 net 表单 | 更新日期: 2023-09-27 18:20:43

在回发我创建的表单时遇到了一个奇怪的问题。答案可能很简单,但我似乎看不出来

我有一个表格,如果视频所在的页面不起作用,用户可以填写。它根据当前选择的视频预先填充字段,并允许用户填写其他字段,并将电子邮件发送给我以获得支持。

问题字段是正确预填充的,但其中一个字段"Page"虽然预填充正确,但没有将值传递给按钮提交方法。

客户端代码(包括一些模拟工具javascript,这很有效)

<asp:Panel ID="pnlVideoProblem" runat="server" Visible="false">
        <h2>Report a video/learning tool issue</h2>
        <div class="keyline"></div>
        <fieldset class="emailform">
            <ul>
                <li><label>Name <span class="error">*</span></label><asp:TextBox ID="txtVideoName" runat="server" MaxLength="60"></asp:TextBox>
                <asp:RequiredFieldValidator ID="RequiredFieldValidator33" runat="server" CssClass="error" ControlToValidate="txtVideoName" ErrorMessage="Required"></asp:RequiredFieldValidator></li>
                <li><label>Email <span class="error">*</span></label><asp:TextBox ID="txtVideoEmail" runat="server" MaxLength="100"></asp:TextBox>
                <asp:RequiredFieldValidator ID="RequiredFieldValidator35" runat="server" CssClass="error" ControlToValidate="txtVideoEmail" ErrorMessage="Required"></asp:RequiredFieldValidator>
                <asp:RegularExpressionValidator ID="RegularExpressionValidator7" runat="server" ControlToValidate="txtVideoEmail" Text="Invalid email" ErrorMessage="Email address is not in the correct format" ValidationExpression="'w+([-+.']'w+)*@'w+([-.]'w+)*'.'w+([-.]'w+)*"></asp:RegularExpressionValidator></li>
                <li><label>OTHER FIELD</label><asp:TextBox ID="txtOtherField" runat="server" MaxLength="10"></asp:TextBox></li>
                <li><label>Video ID</label><asp:TextBox ID="txtVideoID" runat="server" ReadOnly="true"></asp:TextBox></li>
                <li><label>Browser/Version </label><asp:TextBox ID="txtVideoBrowser" runat="server" MaxLength="100"></asp:TextBox></li>
                <li><label>Flash Version </label><asp:TextBox ID="txtFlashVersion" runat="server"></asp:TextBox></li>
                <li><label>Page </label><asp:TextBox ID="txtVideoPage" runat="server"></asp:TextBox></li>
                <li><label>Visible error messages </label><asp:TextBox ID="txtVisError" runat="server" TextMode="MultiLine" Rows="6" MaxLength="4000"></asp:TextBox></li>
            </ul>
            <asp:Button ID="btnSubmitVideoIssue" runat="server" CssClass="subbutton" Text="Submit report" OnClick="btnSubmitVideoIssue_Click" />
        </fieldset>
        <script type="text/javascript">
            window.addEvent('domready', function () {
                document.id('<%= txtVideoBrowser.ClientID %>').set('value', Browser.Platform.name + ", " + Browser.name + " " + Browser.version);
                document.id('<%= txtFlashVersion.ClientID %>').set('value', Browser.Plugins.Flash.version + "." + Browser.Plugins.Flash.build);
            });
        </script>
    </asp:Panel>

按钮代码后面的页面(回发时没有重新设定值)

protected void btnSubmitVideoIssue_Click(object sender, EventArgs e)
{
    if (CheckEmptyCaptcha() == false)
    {
        //this field is hidden in css and empty. if it has been filled in, then an automated way of entering has been used.
        //ignore and send no email.
    }
    else
    {
        StringBuilder sbMessage = new StringBuilder();
        emailForm = new MailMessage();
        sbMessage.Append("Name : " + txtVideoName.Text.Trim() + "<br>");
        sbMessage.Append("Email : " + txtVideoEmail.Text.Trim() + "<br>");
        sbMessage.Append("Other Field : " + txtOtherField.Text.Trim() + "<br>");
        sbMessage.Append("Video ID : " + txtVideoID.Text.Trim() + "<br>");
        sbMessage.Append("Browser : " + txtVideoBrowser.Text.Trim() + "<br>");
        sbMessage.Append("Flash Version : " + txtFlashVersion.Text.Trim() + "<br>");
        sbMessage.Append("Visible error messages : " + txtVisError.Text.Trim() + "<br>");
        sbMessage.Append("Url referrer : " + txtVideoPage.Text.Trim()+"<br>");
        sbMessage.Append("Browser : " + Request.UserAgent + "<br>");
        if (txtVideoBrowser.Text.Contains("ie 6"))
        {
            sbMessage.Append("<strong>Browser note</strong> : The PC that made this request looks like it was using Internet Explorer 6, although videos work in IE6, the browser isn't stable software, and therefore Javascript errors may occur preventing the viewing of the page/video/learning tool how it was intended. Recommend that the user upgrades their browsers to the latest version of IE.<br>");
        }
        Double flashver = 0.0;
        if(Double.TryParse(txtFlashVersion.Text, out flashver))
        {
            if(flashver < 9.0)
            {
                sbMessage.Append("<strong>Flash version note</strong> : The PC that made this request is currently using flash version "+flashver+". Flash version 9 or greater is required to view videos. Recommend user upgrades their flash version by visiting http://get.adobe.com/flashplayer<br>");
            }
        }
        else
        {
            sbMessage.Append("<strong>Flash version note</strong> : It doesn't look like flash is installed on the PC that made this request. Flash is required to view videos . Recommend user installs flash by visiting http://get.adobe.com/flashplayer<br>");
        }
        emailForm.To.Add(new MailAddress("admin@test.com"));
        emailForm.From = new MailAddress(txtVideoEmail.Text.Trim(), txtVideoName.Text.Trim());
        emailForm.Subject = "[ERROR] - [VIDEO ISSUE] from " + txtVideoName.Text.Trim();
        emailForm.Body = sbMessage.ToString();
        emailForm.IsBodyHtml = true;
        bool sendSuccess = false;
        try
        {
            SmtpClient smtp = new SmtpClient();
            smtp.Send(emailForm);
            sendSuccess = true;
        }
        catch
        {
            pnlVideoProblem.Visible = false;
            pnlFailure.Visible = true;
            ltlFailure.Text = "There was a problem sending your feedback, please go back and try again.";
        }
        finally
        {
            if (sendSuccess)
            {
                pnlVideoProblem.Visible = false;
                pnlSuccess.Visible = true;
                ltlSuccess.Text = "Thank you, your feedback has been sent. Click close to return to the website.";
            }
            else
            {
                pnlVideoProblem.Visible = false;
                pnlFailure.Visible = true;
                ltlFailure.Text = "There was a problem sending your feedback, please go back and try again.";
            }
        }
    }
}

表单值

Name : User
Email : User@test.com
Other Field : aab123
Video Learning ID : 5546
Browser version : win, firefox 9
Flash version : 11.102
Page : https://www.awebsite.com/library/video/5546
Visible error messages : ewrwerwe

生成的电子邮件

Name : User
Email : user@test.com
Other Field : aab123
Video ID : 5546
Browser : win, firefox 9
Flash Version : 11.102
Url referrer : 
Visible error messages : ewrwerwe

在(!IsPostBack)上填充视频ID和页面/Url引用

(!IsPostBack)

pnlVideoProblem.Visible = true;
if (!String.IsNullOrEmpty(Request.QueryString["vid"]))
{
    txtVideoID.Text = Request.QueryString["vid"];
}
if (!String.IsNullOrEmpty(Request.QueryString["other"]))
{
    txtOtherField.Text = Request.QueryString["other"];
    txtOtherField.ReadOnly = true;
}
txtVideoPage.Text = HttpUtility.UrlDecode(Request.QueryString["ref"]);
txtVideoPage.ReadOnly = true;

有什么想法吗?我有一堵砖墙,根据答案的简单程度,我可以撞到它。

c#.net表单的回发没有保留1个值

如果TextBox的ReadOnly属性是";真";,回发数据不会loaded,例如,它本质上意味着TextBox是只读的服务器端立场(客户端更改将被忽略)。

如果您希望TB是只读的;"老派";用途:

TextBox1.Attributes.Add("只读","只读")

因为这不会影响服务器端功能。

发件人:http://aspadvice.com/blogs/joteke/archive/2006/04/12/16409.aspx


另请参阅:http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.textbox.readonly.aspx

已解决:)

一缕阳光过后,我想起我有这个

RewriteRule ^/pop/(.*[^/])/report-issue/([a-fA-F0-9]{32})-([0-9]+)$ /pop.aspx?tp=$1&pg=report-issue&vid=$2&other=$3&ref=%{HTTP_REFERER} [L]

作为重写规则,这让我更仔细地研究表单fieldswere是否真的被封装在回发中。瞧,他们不是。

我包了一个!围绕querystring变量读取部分进行回发,它很有效!

砖墙需要很厚。

感谢那些试图提供帮助的人!