Monthly Archives: Listopad 2015

Autouzupełnianie tekstu w polu tekstowym ASP.NET MVC

W ASP.NET WebForms możliwość podpowiadania użytkownikowi wyników podczas wpisywania tekstu jest wbudowany, a w MVC trzeba sobie radzić samemu. To nie znaczy, że w MVC jest gorzej. To znaczy, że w MVC masz większą możliwość zapanowania nad kodem. Aby wprowadzić możliwość autouzupełniania tekstu w polu tekstowym podczas wpisywania, musimy dodać bardzo popularną bibliotekę jQuery i jej rozszerzenie jQuery UI.

Aby dodać obsługę jQuery, musimy dodać do widoków ładowanie biblioteki javascript’owej. Ja osobiście korzystam w swoich projektach z CDN’ów, które są udostępniane przez twórców jQuery. Oczywiście równie dobrze można pobrać plik js i css na swój serwer i z niego serwować klientowi bibliotekę, choć w moim przypadku szybciej pliki biblioteki ładują się z CDN’a.

Do strony w części <head> dodajemy następujące wpisy:

<link href="https://code.jquery.com/ui/1.11.3/themes/smoothness/jquery-ui.css" rel="stylesheet">

<script src="http://code.jquery.com/jquery-1.11.3.min.js"></script>

<script src="https://code.jquery.com/ui/1.11.3/jquery-ui.min.js"></script>

Dzięki nim będziemy mogli wykonać kod javascript’owy na textbox’ie. Warto je dodać w widoku _Layout.cshtml który jest takim jakby szablonem dla innych widoków, ale jeżeli go nie używasz, to możesz ominąć tę uwagę. Następnie dodajemy pole tekstowe w którym chcemy mieć możliwość uzyskania podpowiedzi:

@Html.TextBox("TestTextBox", null, new { id = "testTextBox" }) // za pomocą wbudowanego helpera ASP.NET MVC


<input type=text name="TestTextBox" id="testTextBox"> // tak jak w czystym html

Gdy już mamy pola tekstowe, musimy dodać kod javascript, który doda funkcjonalność autocomplete:

<script>
 $(function () {
 $("#testTextBox").autocomplete({ source: [email protected]("GetTestList")', minLength: 1 });
 });
 </script>

$(„#testTextBox”) – szukamy elementu o podanym id

.autocomplete( – wykonujemy jQuery’ową funkcję

{ source: [email protected](„GetTestList”)’ – podajemy skąd ma czerpać dane funkcja autocomplete, czyli z funkcji GetTestList, która będzie znajdować się w kontrolerze

minLength: 1 – określamy jak szybko funkcja ma zacząć podpowiadać, w tym przypadku po wpisaniu jednego znaku

Gdy już mamy ogarnięty widok w 100%, musimy zająć się funkcją z kontrolera, która będzie dostarczać wyniki podczas wpisywania. Funkcja będzie zwracać wyniki w formie listy w formacie JSON (jeżeli nie wiesz co to za format, na wikipedii jest to świetnie wyjaśnione).

 

 public JsonResult GetCustomer(string term)
 {
 var customers = db.CustomerSet.Where(x => x.Code.StartsWith(term)).Select(y => y.Code).ToList();

 return Json(customers, JsonRequestBehavior.AllowGet);
 }

W skrócie wygląda to tak: Wykonujemy select na tabeli w bazie danych z odpowiednim wyrażeniem. Wynik zostaje przekonwertowany do formatu JSON i zwracany jako wynik funkcji.

autouzupełnianie tekstu

Adblock nie blokuje reklam na moim blogu

Sytuacja zaczęła się około miesiąca temu. Zacząłem zauważać zwiększone przychody z reklam w ramach Google Adwords i zacząłem się zastanawiać jaki jest powód takiego stanu rzeczy. Przypuszczałem, że może być to związane ze zwiększonym ruchem na mojej stronie, ponieważ rzeczywiście w ciągu ostatniego miesiąca ruch się znacząco zwiększył, ale nie na tyle, żeby wzrost zarobków był ponad 100 procentowy.

Zainstalowałem parę miesięcy temu plugin, który osobom z włączonym Adblokiem wyświetla informację, że na stronie nie ma wkurzających reklam i ta strona się z nich utrzymuje. Dobrą funkcją tego plugina było wyświetlanie statystyk ilości osób z włączonym Adblokiem. Ku mojemu zdziwieniu w ciągu ok. miesiąca nie było żadnego wejścia z włączonym Adblokiem.

Nie zgłaszałem się do programu przyjaznych stron, którą oferował twórca Adblock, ponieważ było za dużo biurokracji (trzeba było wysłać dla każdej podstrony osobną informacje). Więc dlaczego nagle blokowanie reklam przestało być realizowane dla mojej strony.

Oczywiście nie narzekam na taki stan rzeczy, ale zwykle jestem dociekliwy w takich przypadkach, zwłaszcza, że nie jest to na rękę Adblokowi, który nie blokując reklam na mojej stronie i być może na innych będzie uchodził za gorzej działającą aplikacje. Z tego co wiem, jakiś czas temu Adblock został sprzedany za jakieś niebotyczne pieniądze i nie wiadomo komu bo nie zostały te informacje ujawnione. Być może ma to związek. Na mojej stronie są reklamy z Adsense, więc być może Google powiększyło swój wachlarz usług o Adblock? Poczekamy zobaczymy.

* Autouruchamianie aplikacji przy starcie systemu w C#

Czasami tworzymy aplikacje, które powinny się uruchamiać przy starcie systemu operacyjnego. Wiadomo, że można stworzyć i dodać klucz do rejestru podczas instalacji programu na komputerze klienta, ale jest również inny sposób, dzięki któremu można pilnować, czy nadal aplikacja jest w autostarcie. W tym konkretnym przypadku, będziemy uruchamiać aktualnie pisaną aplikacje, ale można uruchomić jakąkolwiek inną. Wystarczy zamienić funkcję:

Application.ExecutablePath.ToString()

na ścieżkę do aplikacji, która ma się uruchamiać przy starcie.

Dodawanie wpisu autostartu (jeżeli istnieje):

RegistryKey rkApp = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true);

if (!IsStartupItem())
rkApp.SetValue("Moja nazwa aplikacji", Application.ExecutablePath.ToString());

Usuwanie wpisu autostartu (jeżeli istnieje):

RegistryKey rkApp = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true);

if(IsStartupItem())
rkApp.DeleteValue("Moja nazwa aplikacji", false);

Sprawdzanie czy istnieje wpis autostartu aplikacji:

private bool IsStartupItem()
{
RegistryKey rkApp = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true);

if (rkApp.GetValue("Moja nazwa aplikacji") == null)
// Jeżeli nie została znaleziona taka wartość w rejestrze
return false;
else
// Jeżeli została znaleziona taka wartość w rejestrze
return true;
}

Źródło: http://stackoverflow.com/questions/7608225/autorun-the-application-using-c-sharp

* Nazwa aktualnego dnia tygodnia po polsku w C#

Gdy wypiszemy na ekranie pole:

DateTime.Today.DayOfWeek

Uzyskamy wynik „Monday” lub inny w języku angielskim, ale gdy piszemy aplikacje, która ma wyświetlać informacje w języku polskim, to wypadałoby zmienić język odpowiedzi na język polski.

W prosty sposób możemy to wykonać za pomocą poniższych funkcji:

var culture = new System.Globalization.CultureInfo("de-DE");
var day = culture.DateTimeFormat.GetDayName(DateTime.Today.DayOfWeek);

Źródło: http://stackoverflow.com/questions/5716762/datetime-now-dayofweek-tostring-with-cultureinfo

* Przycisk cofający do poprzedniej strony HTML i JS

Kod pozwalający cofnąć się do poprzedniej strony jest mega prosty, ale (aż głupio się do tego przyznawać) nie mogę go zapamiętać i za każdym razem szukam. Tak więc wstawiam, żeby już więcej nie szukać 🙂

<input action="action" type="button" value="Back" onclick="history.go(-1);" />