ASP.NET: отображение уведомления на другой странице после успешного сохранения данных в базе данных - PullRequest
1 голос
/ 03 декабря 2010

Я искал в Интернете, но не нашел по-настоящему хорошего ответа на этот вопрос ..

Допустим, у меня есть форма на AddToList.aspx, и я хочу, чтобы после того, как вы нажмете send, она направит вас обратно к List.aspx с сообщением «Элемент был добавлен в список» в окне сообщения div. .

мне нужно отправить List.aspx? Msg = мое сообщение, или есть другой хороший способ сделать это?

EDIT:

поэтому я сделал этот класс помощника:

   public class MessageHelper : System.Web.UI.MasterPage
    {
        public void SetMessage(String message)
        {
            Session["Message"] = message;
        }

        public string GetMessage()
        {
            if (String.IsNullOrEmpty(Session["Message"]))
            {
                String temp = Session["Message"];
                Session["Message"] = "";
                return temp;
            }
            else
            {
                return "";
            }
        }
    }

и получил эту ошибку:

Error   32  The best overloaded method match for 'string.IsNullOrEmpty(string)' has some invalid arguments
Error   33  Argument '1': cannot convert from 'object' to 'string'
Error   34  Cannot implicitly convert type 'object' to 'string'. An explicit conversion exists (are you missing a cast?)

Ответы [ 4 ]

1 голос
/ 03 декабря 2010

Вам необходимо преобразовать в строку. Параметры сеанса хранятся в виде объектов.

Также может быть полезно реализовать это как метод расширения. Таким образом, он будет доступен на всех типах страниц (Master и UI)

  public static class MessageHelper
    {
        public static void SetMessage(this Page page, String message)
        {
            Session["Message"] = message;
        }

        public static string GetMessage(this Page page)
        {
            var messageText = Session["Message"] as string;
            if (!String.IsNullOrEmpty(messageText ))
            {
                Session["Message"] = "";
                return messageText;
            }
            return "";
        }
    }
0 голосов
/ 03 декабря 2010

Я пока не могу комментировать, или я бы просто прокомментировал это в вашем посте. Вам нужно привести свою переменную сеанса так: (строка) Session ["Message"]. Итак, код будет выглядеть так:

public class MessageHelper : System.Web.UI.MasterPage
{
    public void SetMessage(String message)
    {
        Session["Message"] = message;
    }

    public string GetMessage()
    {
        if (String.IsNullOrEmpty((string)Session["Message"]))
        {
            String temp = (string)Session["Message"];
            Session["Message"] = "";
            return temp;
        }
        else
        {
            return "";
        }
    }
}

На самом деле есть лучший способ написания этого класса: сделать его одним свойством вместо двух методов. Это будет выглядеть так: (я также исправил вашу логику; GetMessage всегда возвращал пустое значение)

public class MessageHelper : System.Web.UI.MasterPage
{
    public MessageHelper()
    {

    }

    public string Message
    {
        set { Session["Message"] = value; }
        get
        {
            if (String.IsNullOrEmpty((string)Session["Message"]))
            {
                Session["Message"] = "";
            }
            return (string)Session["Message"];
        }
    }
}

В ваших двух соответствующих файлах вы должны установить и получить это так:

//in AddToList.aspx
MessageHelper msg = new MessageHelper();
msg.Message = "The Item was added to your list.";

//and in List.aspx, assigned to an arbitrary Label named myMessageLabel
MessageHelper msg = new MessageHelper();
myMessageLabel.Text = msg.Message;
0 голосов
/ 03 декабря 2010

Вы, безусловно, можете использовать строку запроса для передачи данных на страницу List.aspx, но будьте осторожны при передаче текста, который вы планируете записать в HTML - вам нужно будет защитить от атак XSS.

Есть несколько других способов сделать это.Скорее всего, у вас будет несколько мест в приложении, где вы хотите перенаправить пользователя на другую страницу, но также отобразите сообщение, которое имеет отношение к тому, что он делал на предыдущей странице (сохраненный элемент, удаленныйпункт и т. д.).Было бы лучше придумать более глобальную схему для этого, а не разовую только для этого конкретного экземпляра.

Одна из идей - использовать Session для хранения сообщения, а затем выполнить перенаправление.

Session("Message") = "Item was added to list."
Response.Redirect("List.aspx")

Затем на своих страницах (или, возможно, на главной странице) вы проверяете Session("Message") и, если у него что-то есть, вы показываете это сообщение пользователю, а затем очищаете эту переменную.

If Session("Message") IsNot Nothing Then
  Response.Write(CType(Session("Message"), String)) 'or set a label text, or show a pop up div, or whatever'
  Session("Message") = Nothing
End If

Если вы используете этот подход, я рекомендую вам написать вспомогательный класс и просто использовать его для управления сообщениями:

MessageHelper.SetMessage("Item added to list.")

и

MessageHelper.GetMessage()

будетметоды, которые вам понадобятся.

0 голосов
/ 03 декабря 2010

Я полагаю, что вы могли бы сделать это, установив PostBackUrl кнопки, используемой для сохранения данных, в «List.aspx». Может быть, установить переменную в true / false на AddToList.aspx, а затем получить доступ к ней из List.aspx?

Не уверен, что это лучше, но это вариант.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...