2012-02-17 13 views
6

Ecco l'affare. Avere un'app Web funzionante utilizzando Web Form di ASP.NET con un backend C#. La cosa funziona bene, ma cerco sempre di migliorare, come principiante in questa roba. In questo momento, a che fare con la ricerca di un utente a tornare senza risultati, ho utilizzare il seguente, e si chiedeva se ci fosse un modo più pulito di farlo, per riferimento futuro:Lanciare un popup quando la ricerca non produce risultati

DataClass data = new DataClass(); 
var searchresults = data.GetData(searchBox.Text); 
int datanumber = searchresults.Count(); 
if (datanumber == 0) 
{ 
    ClientScript.RegisterStartupScript(this.GetType(), "alert", "javascript:alert('There were no records found to match your search');", true); 
} 
else 
{ 
    DropDownList1.Visible = true; 
    DropDownList1.Items.Clear(); 
    DropDownList1.DataSource = searchresults; 
    DropDownList1.DataBind(); 
} 
+9

Personalmente, avevo appena piuttosto la pagina di dire che non c'erano risultati (magari in un font rosso così da far risaltare), piuttosto che un popup. –

+0

In realtà non preferisco usare gli avvisi quando sto parlando con un utente a meno che non provi a lasciare la mia pagina e devo confermare che i suoi dati andranno persi. La maggior parte delle volte mostro solo un div con un bel messaggio o un div animato che dice che non sono stati trovati risultati. – Songo

+1

@JustinSteranko: ad esempio, puoi aprire il popup utilizzando un popup jquery. Personalmente, trovo i popup fastidiosi e concordo con Mike Chrstensen –

risposta

0

Sono d'accordo con i non utilizzano popup, così si potrebbe sempre fare qualcosa di semplice come avere un oggetto Label nella pagina:

<asp:Label runat="server" id="lblResultMsg" ForeColor="Red" Visible="False" /> 

e quindi impostare il testo in modo dinamico (o aggiungerlo come una proprietà al codice) e impostare l'etichetta per essere visibili su postback se non vengono trovati risultati:

if (datanumber == 0) 
{ 
    lblResultMsg.Text = "There were no records found to match your search."; 
    lblResultMsg.Visible = true; 
} 
else 
{ 
    lblResultMsg.Text = ""; 
    lblResultMsg.Visible = false; 

    // do your data binding 
} 

Ma ci sono abbastanza un vasto numero di modi potresti ottenere qualcosa di simile. Per quanto riguarda la tua domanda sull'utilizzo di .Count dalla collezione Enumerable, non c'è nulla che ti impedisca di farlo poiché è perfettamente valido. La domanda è quale metodo trovi più leggibile?

0

se si include la ui jquery dialogo (http://jqueryui.com/demos/dialog/), si può semplicemente chiamare questo per creare una bella finestra di dialogo:

$('<div>message</div>').dialog({autoOpen:true,title:'Error'}); 
0

Personalmente preferisco per creare una funzione di supporto per l'inserimento del javascript rilevante nella pagina, e solo passare i parametri alla funzione in modo che non debba preoccuparsi dei dettagli disordinati ogni volta.

Qualcosa di simile:

public static void GrowlMessage(System.Web.UI.Control pageControl, string header = "", string message = "", bool sticky = false, string position = "top-right", string theme = "", bool closer = true, int life = 8) 
{ 
    string _js = "$.jGrowl('" + HttpContext.Current.Server.HtmlEncode(message) + "', { header:'" + header + "', sticky:" + sticky.ToString().ToLower() + ", position: '" + position + "', theme: '" + theme + "', closer: " + closer.ToString().ToLower() + ", life:" + life * 1000 + "});"; 
    ScriptManager.RegisterStartupScript(pageControl, pageControl.GetType(),"Growl",_js, true);    
} 

Il campione ho usato richiede anche jQuery e la biblioteca jGrowl disponibili here. E IMHO i messaggi sono carini. Sono discreti, l'utente non ha bisogno di fare clic su un pulsante per farli andare via, e svaniscono dopo il tempo specificato.

Ma concordo con Mike, che se non si dispone di alcun record, è sufficiente utilizzare le proprietà incorporate di un GridView (EmptyDataRowStyle e EmptyDataRowText) per visualizzare un messaggio di stile "nessun dato corrispondente alla query". Supponendo che tu stia usando un GridView, cioè ..

+0

Alla fine viene passato in un gridview, ma prima in un dropdownlist come filtro secondario. Questo per mantenerlo in linea con alcune delle nostre altre applicazioni Web a cui gli utenti finali sono abituati –

0

Se avete deciso di avvisare all'utente tramite avviso quindi si prega di andare avanti con effetto light box ..

http://www.designyourway.net/blog/resources/30-efficient-jquery-lightbox-plugins/

se si sta ancora vorrebbe andare avanti con avviso tradizionale poi, ovviamente, la sua facile per voi al fuoco fino al caricamento della pagina, piuttosto che attaccare script per esso ..

')" ....>

Perché se hai bisogno di alcun cambiamento, allora non vi resta che modificare il javascript da solo e non avete bisogno costruire progetto di nuovo per testarlo ...

Spero che sia utile per te ..

Nota: sto usando i miei DLL per il rendering del contenuto così sopra la codifica maggio richiede l'alterazione, perché ho dimenticato codifiche ASP tradizionali .. :)

Problemi correlati