Родительская страница, включающая форму iframe с AsyncFileUpload. перенаправить на «_top» после загрузки и нажатия «отправить»

#c# #asp.net #asp.net-ajax #ajaxcontroltoolkit #asyncfileupload

#c# #asp.net #asp.net-ajax #ajaxcontroltoolkit #asyncfileupload

Вопрос:

У меня есть родительская страница (testFrame.aspx), включающая iframe.

Iframe представляет собой форму aspx (form.aspx) с элементом управления AsyncFileUpload (ajaxcontroltoolkit).
Форма содержит текстовое поле и средство проверки обязательных полей.
В bt_Send коде я проверяю, ввел ли пользователь текст в текстовое поле, и если нет, я показываю сообщение об ошибке.

Теперь, если я протестирую свою родительскую форму и введу текст и нажму «Отправить», я увижу сообщение о моем отзыве (текст, который я ввел в текстовое поле).
Если я не ввожу текст и нажимаю «Отправить», я получаю сообщение об ошибке.

Теперь происходит странная вещь: если я не ввожу текст, но загружаю файл с AsyncFileUpload.
Я нажимаю «отправить» и вместо получения сообщения об ошибке, я перенаправляюсь на form.aspx за пределами моей родительской страницы (например, target =»_top»), без сообщения об ошибке. Я просто вижу, что чистой формы больше нет в моем iframe.

Я этого не хочу. Я хочу, чтобы форма оставалась на моей родительской странице

testForm.aspx выглядит следующим образом:

 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    This is a container page. The following is inside an iframe:
    <br />

    <iframe src="form.aspx" width="800px" height="400px"></iframe>
    </div>
    </form>
</body>
</html>
  

form.aspx выглядит следующим образом:

 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="form.aspx.cs" Inherits="TestToolkit.form" %>

<%@ Register assembly="AjaxControlToolkit" namespace="AjaxControlToolkit" tagprefix="asp" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
    <title>Test Form</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:Label ID="lblFirstName" runat="server" Text="First Name"></asp:Label>amp;nbsp;amp;nbsp;
        <asp:TextBox ID="txtFirstName" runat="server"></asp:TextBox>

        <br /><br />
        <asp:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server">
        </asp:ToolkitScriptManager>
        Upload picture: <asp:AsyncFileUpload ID="AsyncFileUpload1" runat="server" ClientIDMode="AutoID" />

            <div id="uploadOk" style="position: relative; left: 330px; bottom: 40px; width:0px; height:0px; display: none;"><asp:Image ID="imgOk" ImageUrl="_img/check-mark-40.png" runat="server" style="" AlternateText="Erledigt!" /></div>

        <br /><br />
        <asp:Button ID="btSend" runat="server" onclick="btSend_Click" Text="Send" />
        <br /><br />
        <asp:Label ID="lblFeedback" runat="server"></asp:Label>
amp;nbsp;<asp:RequiredFieldValidator runat="server" ID="rfvFirstName" ControlToValidate="txtFirstName" Display="None" EnableClientScript="false" />
    </div>
    </form>
</body>
</html>
  

и код, лежащий в основе form.aspx.cs:

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace TestToolkit
{
    public partial class form : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
        }

        protected void btSend_Click(object sender, EventArgs e)
        {
            //ShowOrRemoveErrors();

            if (IsValid)
            {
                lblFeedback.Text = txtFirstName.Text;
            }
            else
            {
                lblFeedback.Text = "Please enter your name";
            }
        }
    }
}
  

Комментарии:

1. Ну, я думаю, я нашел ответ на свой вопрос.

2. Я оставляю вопрос открытым на некоторое время на случай, если у кого-то есть лучшее решение… получайте удовольствие 😉

Ответ №1:

Ну, я думаю, я нашел ответ на свой вопрос.

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

Проблема возникает при обратной отправке. Итак, что я сделал, так это внедрил проверку на стороне клиента с помощью EnableClientScript="true" :

 <asp:RequiredFieldValidator runat="server" ID="rfvFirstName" ControlToValidate="txtFirstName" Display="None" EnableClientScript="true" />
  

При проверке на стороне клиента обратная отправка невозможна, если все мои обязательные поля не заполнены правильно.

Надеюсь, это поможет людям с моей такой же проблемой.