c # .net обратная передача формы, не сохраняющая 1 значение - PullRequest
1 голос
/ 18 января 2012

Возникла странная проблема с обратной передачей формы, которую я создал.Ответ, вероятно, будет очень простым, но я не вижу его.

У меня есть форма, которую пользователь может заполнить, если страница, на которой находится видео, не работает.Он предварительно заполняет поля на основе текущего выбранного видео и позволяет пользователю заполнять другие поля и отправлять мне электронное письмо для поддержки.

Проблема Поля предварительно заполнены.заполнено правильно, но одно из полей «Страница», хотя и предварительно заполнено правильно, не передает значение методу отправки кнопки.

код клиента (включает некоторые JavaScript-код mootools, это работает)

<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

Идентификатор видео и Page / Url Referrer заполняются (! IsPostBack)

(! 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;

есть идеи?У меня есть кирпичная стена, от которой я могу удариться головой в зависимости от того, насколько простой ответ.

Ответы [ 2 ]

2 голосов
/ 18 января 2012

Если свойство ReadOnly TextBox имеет значение «true», данные обратной передачи не будут загружены, например, это означает, что TextBox будет доступен только для чтения с точки зрения сервера (изменения на стороне клиента будут игнорироваться).

Если вы хотите, чтобы ТБ был доступен только для чтения "по старинке", используйте:

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

0 голосов
/ 19 января 2012

Решено:)

После крошечного солнечного луча я вспомнил, что у меня это

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]

как правило переписывания, которое затем заставило меня поближе взглянуть, является ли формаПоля были фактически завернуты в обратную передачу.Черт возьми, они не вернулись.

Я обернул постбэк! Вокруг секции чтения переменных строки запроса, и это работает!

кирпичная стена должна быть очень толстой.

спасибо тем, кто пытался помочь!

...