Merhabalar

Sitem için iletişim formu oluşturdum fakat butona click edilip sayfa yenilenince aynı mesaj tekrar mail atılıyor bunu nasıl çözebilirim postback denedim ama yapamadım.teşekkürleralt text

soruldu: 10 Ağu '15, 09:47

rakkurt's gravatar image

rakkurt
9691013
cevap kabul oranı: 28%

Eğer mesaj göndermeye yarayan methodun başına [HttpPost] attribut'ünü eklerseniz sayfa yenilendiğinde otomatik postu tetikleyen bir aksiyon yok ise bir problem olmaz.

(21 Ağu '15, 05:55) Purecoder Purecoder's gravatar image

Kodunu aşağıdaki gibi düzenleyip deneyebilir misin?

        public int PageStatu
        {
            get
            {
                if (ViewState["PageStatu"] != null)
                {
                    return Convert.ToInt32(ViewState["PageStatu"]);
                }
                return -1;
            }

            set
            {
                ViewState["PageStatu"] = value;
            }
        }

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                Session["PostID"] = "1001";
                ViewState["PostID"] = Session["PostID"].ToString();
                //Response.Write("Sayfa ilk kez yüklendi");
                ViewState["PageStatu"] = 1;

            }
            else
            {
                if (ViewState["PostID"].ToString() == Session["PostID"].ToString())
                {
                    Session["PostID"] = (Convert.ToInt16(Session["PostID"]) + 1).ToString();

                    ViewState["PostID"] = Session["PostID"].ToString();
                    //Response.Write("Postback yapıldı");
                    ViewState["PageStatu"] = 2;

                }
                else
                {
                    ViewState["PostID"] = Session["PostID"].ToString();
                    //Response.Write("Sayfa refresh yapıldı");
                    ViewState["PageStatu"] = 3;
                }
            }
        }

        protected void Button1_OnClick(object sender, EventArgs e)
        {
            if (PageStatu == 3)
            {
               // Sayfa Refresh olduğu için kod burda kesilir
                return;
            }

            String isim = Request.Form["isim"];
            String mail = Request.Form["mail"];
            String mesaj1 = Request.Form["textarea"];

            try
            {

                MailMessage mesaj = new MailMessage();
                mesaj.Subject = "iletişim";
                mesaj.From = new MailAddress(mail);

                mesaj.To.Add("deneme@gmail.com");

                mesaj.Body = "isim:" + Environment.NewLine + isim + Environment.NewLine + Environment.NewLine + "Mail:" + Environment.NewLine + mail + Environment.NewLine + Environment.NewLine + mesaj1;
                SmtpClient server = new SmtpClient("smtp.gmail.com");
                server.Credentials = new System.Net.NetworkCredential("deneme@gmail.com", "....");
                server.Port = 587;
                server.EnableSsl = true;
                server.Send(mesaj);

                String msj = "Mesajınız gönderildi.Teşekkürler";
                Response.Write("<script>alert('" + msj + "')</script>");
            }

            catch (Exception ex)
            {
                String msj1 = "Bir sorun oluştu ve mesajınız yollanmadı , lütfen tekrar deneyiniz.";
                Response.Write("<script>alert('" + msj1 + "')</script>");

            }

        }
permanent link

cevaplandı: 25 Ağu '15, 01:49

M%C3%BCsl%C3%BCm%20%C3%96ZT%C3%9CRK's gravatar image

Müslüm ÖZTÜRK
10.7k103691
cevap kabul oranı: 28%

Bu durum asp.net te gelen bir sorun. Aşağıdaki örnek kod parçasının kendine göre düzenleyip eğer refresh yapılmamış ise mail gönderme kodunun çalıştırılmasını sağlayabilirsin. Mesela sayfa durumunu viewState de saklayıp mail gönderme kısmında viewstateden kontrol ettirebilirsin.

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        Session["PostID"] = "1001";
        ViewState["PostID"] = Session["PostID"].ToString();
        Response.Write("Sayfa ilk kez yüklendi");
    }
    else
    {
        if (ViewState["PostID"].ToString() == Session["PostID"].ToString())
        {
            Session["PostID"] = (Convert.ToInt16(Session["PostID"]) + 1).ToString();

            ViewState["PostID"] = Session["PostID"].ToString();
            Response.Write("Postback yapıldı");

        }
        else
        {
            ViewState["PostID"] = Session["PostID"].ToString();
            Response.Write("Sayfa refresh yapıldı");
        }
    }
}

İyi çalışmalar.

permanent link

cevaplandı: 21 Ağu '15, 05:01

M%C3%BCsl%C3%BCm%20%C3%96ZT%C3%9CRK's gravatar image

Müslüm ÖZTÜRK
10.7k103691
cevap kabul oranı: 28%

hocam iki çözümüde uyguladım ama olmadı [httpPost] olayını tanımadı bir import olayı var mı aradım bulamadım.

permanent link

cevaplandı: 24 Ağu '15, 03:36

rakkurt's gravatar image

rakkurt
9691013
cevap kabul oranı: 28%

değiştirildi: 24 Ağu '15, 03:43

Bir noktada eksiklik yapmış olabilirsin. sayfanın postback mi yoksa reload mı olduğunu yakalayabiliryoruz paylaştığım örnek kod ile. Tekrardan kodunu kontrol edebilir misin.

(24 Ağu '15, 06:15) Müslüm ÖZTÜRK M%C3%BCsl%C3%BCm%20%C3%96ZT%C3%9CRK's gravatar image

Hocam kodlarım tam olarak bunlar bunu nasıl sorgulatmam lazım anlamadım ki kodların hepsini kapsayan bir if ekledim nerde yanlışım acaba

protected void Button1_Click(object sender, EventArgs e) {

if (ViewState["PostID"].ToString() != Session["PostID"].ToString()) {

    String isim = Request.Form["isim"];
    String mail = Request.Form["mail"];
    String mesaj1 = Request.Form["textarea"];

    try
    {

        MailMessage mesaj = new MailMessage();
        mesaj.Subject = "iletişim";
        mesaj.From = new MailAddress(mail);

        mesaj.To.Add("deneme@gmail.com");

        mesaj.Body = "isim:" + Environment.NewLine + isim + Environment.NewLine + Environment.NewLine + "Mail:" + Environment.NewLine + mail + Environment.NewLine + Environment.NewLine + mesaj1;
        SmtpClient server = new SmtpClient("smtp.gmail.com");
        server.Credentials = new System.Net.NetworkCredential("deneme@gmail.com", "....");
        server.Port = 587;
        server.EnableSsl = true;
        server.Send(mesaj);

        String msj = "Mesajınız gönderildi.Teşekkürler";
        Response.Write("<script>alert('" + msj + "')</script>");
    }

    catch (Exception ex)
    {
        String msj1 = "Bir sorun oluştu ve mesajınız yollanmadı , lütfen tekrar deneyiniz.";
        Response.Write("<script>alert('" + msj1 + "')</script>");

    }

}}
permanent link

cevaplandı: 24 Ağu '15, 11:32

rakkurt's gravatar image

rakkurt
9691013
cevap kabul oranı: 28%

değiştirildi: 24 Ağu '15, 11:33

Hocam şuan sorun halloldu.Teşekkür ederim oturup uğraşmışsınız Allah razı olsun..

permanent link

cevaplandı: 25 Ağu '15, 04:01

rakkurt's gravatar image

rakkurt
9691013
cevap kabul oranı: 28%

Cevabınız
toggle preview

Bu soruyu takip et

E-Posta üzerinden:

Üyelik girişi yaptıktan sonra abonelik işlemlerini yapabilirsiniz

RSS üzerinden:

Cevaplar

Cevaplar ve Yorumlar

Yazı Formatlama

  • *italic* ya da _italic_
  • **bold** ya da __bold__
  • link:[text](http://url.com/ "başlık")
  • resim?![alt text](/path/img.jpg "başlık")
  • liste: 1. Foo 2. Bar
  • temel HTML etiketleri de kullanılabilir

Bu sorunun etiketleri:

×158
×16

Soruldu: 10 Ağu '15, 09:47

Görüntüleme: 507 kez

Son güncelleme: 25 Ağu '15, 04:01

powered by BitNami OSQA