Soru Asp.net metin kutusu için Kayıp Odak yöntemi?


Asp.net metin yöntemi için Lost focus yöntemi nasıl yazılır? Lütfen bunu yazmanın bir fikri var mı, benimle paylaş?


25
2017-10-05 13:11


Menşei




Cevaplar:


Bu yüzden herkesin temel müşteri tarafı yaklaşımını gösterdiğinin farkındayım ve bu iyi bir şey ama en azından sunucudaki belirli bir istemci tarafı olayını ele almak için bir çözüm göstermek istedim.

Kodlara bir göz atalım ve parça parçaya geçelim.

ASP.Net TextBox OnBlur için bir sunucu tarafı olay ortaya çıkmadığından, bunu elle yapmanız gerekecektir. Neyse ki bu elde etmek oldukça kolaydır. .Aspx sayfanızda bu küçük bir kodun olduğunu varsayalım. TextBox odağı kaybettiğinde bir Label kontrol sunucusu tarafını güncellemek istersiniz.

<asp:Label ID="lblOnBlur" runat="server">On Blur Example</asp:Label><br />
<asp:TextBox ID="tbOnBlur" runat="server" ClientIDMode="Static" /><br />
<asp:Label ID="lblOutput" runat="server" />

ASP.Net yerleşik bir istemci tarafı işlevi iki parametre alan geri bildirimleri tetiklemek için çağrılır:

  1. Hedef (olaya neden olan kontrolün kimliği)
  2. Bağımsız değişken (sunucuya geçmek istediğiniz isteğe bağlı bilgiler)

Sen could TextBox'ınıza aşağıdaki özniteliği ve değeri ekleyerek etkinliği işaretlemeniz yeterlidir:

onblur="__doPostBack('tbOnBlur','OnBlur');"

Ancak, bu komut dosyasını sunucu tarafı için oluşturmanın kolay bir yolu vardır. Page_Init yönteminizde, yalnızca bir çağrı ekleyin GetPostBackEventReference ve kontrol ettiğiniz gibi "onblur" özniteliğine atayın:

protected void Page_Init(object sender, EventArgs e)
{
    var onBlurScript = Page.ClientScript.GetPostBackEventReference(tbOnBlur, "OnBlur");
    tbOnBlur.Attributes.Add("onblur", onBlurScript);
}

Standart sunucu kontrol olayları ile, olay teletlemesi ve çağırma işlemi sizin için otomatik olarak ele alınır. IPostBackEventHandler. Bu, tek seferlik bir çözüm için çok fazla bir iştir, bu yüzden istek parametrelerini inceleyerek manuel olarak ele alalım.

protected void Page_Load(object sender, EventArgs e)
{
    if (IsPostBack)
    {
        var ctrlName = Request.Params[Page.postEventSourceID];
        var args = Request.Params[Page.postEventArgumentID];

        HandleCustomPostbackEvent(ctrlName, args);
    }
}

private void HandleCustomPostbackEvent(string ctrlName, string args)
{
    //Since this will get called for every postback, we only
    // want to handle a specific combination of control
    // and argument.
    if (ctrlName == tbOnBlur.UniqueID && args == "OnBlur")
    {
        lblOutput.Text = "On Blur Event Handled Server Side!" + DateTime.Now;
    }
}

Sonunda, çerçeveye biraz girmeyi düşünmüyorsanız, sunucu tarafı olaylarını simüle etmek çok zor değildir.

Bu yardımcı olur umarım!

Alkış,
alay etmek


35
2017-10-05 17:46



+1 Josh. Bu gerçekten çok bilgilendirici oldu. - Zo Has
Güzel cevabınız Genii için çok teşekkür ederim. Gönderin benim için çok bilgilendirici. - Ashok kumar
Bunu nasıl yapacağınıza dair birkaç öneri gördüm ve cevabınız en iyisi. Teşekkürler! - Aaron
@Aaron - Teşekkürler :) - Josh
Çok hoş! Teşekkürler - hardba11


Sunucunun, metin kutusunun odağı kaybettikten sonra bir şeyler yapmasını isterseniz, AutoPostback = "True" öğesini ekleyebilir ve geri yüklemenin tüm sayfayı yeniden yüklemesini istemiyorsanız, bir UpdatePanel kullanın:

    <asp:ScriptManager ID="ScriptManager1" runat="server" />
    <asp:UpdatePanel ID="UpdatePanel1" runat="server">
        <ContentTemplate>
            <asp:TextBox ID="TextBox1" runat="server" AutoPostBack="true" 
                            OnTextChanged="TextBox1_TextChanged" />
        </ContentTemplate>
    </asp:UpdatePanel>

TextBox1_TextChanged işlevi, metinle (serveride) bir şeyler yapabilir.


14
2017-10-05 14:49



Faiz dışı - güncelleme panosu tüm sayfanın yeniden yüklenmesini nasıl durdurur? - Kamal
@Kamal ... yapmaz. Bir güncelleme paneli, tüm sayfanın sunucuya yüklenmesini önlemek için hiçbir şey yapmaz. Esasen, XmlHttpRequest kullanarak istemci tarafına bir geri gönderme gerçekleştirilir ve daha sonra UpdatePanel'in içeriği atılır ve geri gönderilir. Normal bir geri yüklemenin "titremesini" azaltır, ancak sunucuda zaman işlenmesini kaydetmez. - Josh
Tüm sayfayı yeniden yükler, ancak yanıttaki içeriği güncellemek için yalnızca güncelleme panelinin html'sini ve bazı javascript'i gönderir. Yanıt, tüm sayfanın indirilmesinden çok daha küçük olabilir ve tarayıcının sayfayı yeniden oluşturması gerekmez. Bu işlemi biraz hızlandırabilir, kullanıcı herhangi bir titreme görmez ve deneyim daha yumuşaktır. - Willem
bu nasıl kabul edilen cevap değil? - Răzvan Flavius Panda
metin kutusuna sekme tuşuna bastığımda kaybolur, ancak yine de on-off olayı başlatılmaz - C Sharper


if (!Page.IsPostBack)
    {
        txtName.Attributes.Add("onblur","alert('Hello world')");
    }

4
2017-10-05 14:39





Neden bunu kullanmıyorsun? Lostfocus aynı şekilde çalışır:

OnTextChanged="TextBox_TextChanged"

0
2017-10-17 13:01



ama ya değeriniz değişmemişse? Bu işe yaramıyor - Dima Grigoriev