Přidání nové kategorie do ovládacího prvku DropDownList v uživatelském rozhraní jQuery
Značka HTML Select
je ideální pro prezentaci seznamu pevných dat kategorií, ale často potřebujete přidat novou kategorii. Předpokládejme, že chceme do kategorií v naší databázi přidat žánr Opera? V této části použijeme uživatelské rozhraní jQuery k přidání dialogového okna, které můžeme použít k přidání nové kategorie. Následující obrázek ukazuje, jak se uživatelské rozhraní zobrazí v prohlížeči.
Když uživatel vybere odkaz Přidat nový žánr , automaticky otevírané dialogové okno vyzve uživatele k zadání nového názvu žánru (a volitelně i popisu). Na následujícím obrázku se zobrazí automaticky otevírané dialogové okno Přidat žánr .
Když zadáte nový název žánru a nasdílíte tlačítko Uložit , stane se toto:
Volání AJAX publikuje data do metody Create Kontroleru žánru, která uloží nový žánr do databáze a vrátí informace o novém žánru (název a ID žánru) jako JSON.
JavaScript přidá do seznamu výběr nová data žánru.
JavaScript vytvoří nový žánr vybranou položku.
Na následujícím obrázku byla opera přidána do databáze a vybrána v rozevíracím seznamu Žánr .
Otevřete soubor Views\StoreManager\Create.cshtml a nahraďte značky žánru následujícím kódem:
<div class="editor-field ui-widget">
@Html.Partial("_ChooseGenre")
</div>
Částečné _ChooseGenre
zobrazení bude obsahovat veškerou logiku pro připojení JavaScriptu a jQuery použité k implementaci nové funkce přidání nového žánru. Jakmile dokončíme kód, bude to jednoduché udělat stejně s uživatelským rozhraním interpreta.
V Průzkumník řešení klikněte pravým tlačítkem na složku Views\StoreManager a vyberte Přidat a pak Zobrazit. Ve vstupu Název zobrazení zadejte _ChooseGenre
a pak vyberte Přidat. Nahraďte kód v souboru Views\StoreManager\_ChooseGenre.cshtml následujícím kódem:
@model MvcMusicStore.Models.Album
<div class="editor-label">
@Html.LabelFor(model => model.GenreId, "Genre" )
</div>
@Html.DropDownList("GenreId", ViewBag.Genres as SelectList, String.Empty)
<a class="button" href="@Url.Content("~/Genre/Create")"
id="genreAddLink">Add New Genre</a>
@Html.ValidationMessageFor(model => model.GenreId)
<div id="genreDialog" class="hidden">
</div>
<script src="@Url.Content( "~/Scripts/ui/jquery.ui.combobox.js" )"></script>
<script src="@Url.Content("~/Scripts/chooseGenre.js")"></script>
První řádek deklaruje, že předáváme jako Album
náš model, přesně stejný příkaz modelu, který se nachází v zobrazení Create. Další pár řádků jsou pomocné značky Popisek . Dalším řádkem je pomocné volání DropDownList , které je úplně stejné jako v původním zobrazení Vytvořit. Další řádek přidá odkaz s názvem Add New Genre
a styly jako tlačítko. Řádek obsahující ValidationMessageFor
se zkopíruje přímo ze zobrazení Vytvořit. Následující řádky:
<div id="genreDialog" class="hidden">
</div>
vytvoří skrytý div s ID .genreDialog
Pomocí jQuery připojíme dialogové okno Přidat žánr s ID genreDialog
v tomto divu. Poslední dvě značky skriptu obsahují odkazy na soubory JavaScriptu, které použijeme k implementaci nové funkce přidání nového žánru. Soubor /Scripts/chooseGenre.js je k dispozici pro vás v projektu, prozkoumáme ho později v tomto kurzu.
Spusťte aplikaci a klikněte na tlačítko Přidat nový žánr . V dialogovém okně Přidat žánr zadejte Opera do vstupního pole Název .
Klikněte na tlačítko Uložit. Volání AJAX vytvoří kategorii Opera a pak naplní rozevírací seznam opera opera a nastaví Opera jako vybraný žánr.
Zadejte interpreta, název a cenu a pak vyberte tlačítko Vytvořit . Pokud zadáte cenu nižší než 8,99 Usd, zobrazí se nové album v horní části zobrazení indexu. Ověřte, že byla nová položka alba uložena v databázi.
Zkuste vytvořit nový žánr pouze s jedním písmenem. Následující kód v souboru Models\Genre.cs nastaví minimální a maximální délku názvu žánru.
[StringLength(20, MinimumLength = 2)]
public string Name { get; set; }
Ověřovací sestavy na straně klienta musíte zadat řetězec mezi 2 a 20 znaky.
Zkoumání způsobu přidání nového žánru do databáze a seznamu vybrat
Otevřete soubor Scripts\chooseGenre.js a prozkoumejte kód.
$(function () {
$('#genreDialog').dialog({
autoOpen: false,
width: 400,
height: 300,
modal: true,
title: 'Add Genre',
buttons: {
'Save': function () {
// Omitted
},
'Cancel': function () {
$(this).dialog('close');
}
}
});
Druhý řádek používá ID genreDialog
k vytvoření dialogového okna na značce div v souboru Views\StoreManager\_ChooseGenre.cshtml . Většina pojmenovaných parametrů je sama vysvětlující. Parametr autoOpen
je nastavený na false a výběrem tlačítka Vytvořit žánr se otevře dialog explicitně (toto je popsáno níže). Dialogové okno obsahuje dvě tlačítka, Uložit a Zrušit. Tlačítko Zrušit zavře dialogové okno. Následující kód ukazuje funkci Uložit tlačítko.
'Save': function () {
var createGenreForm = $('#createGenreForm');
if (createGenreForm.valid()) {
$.post(createGenreForm.attr('action'), createGenreForm.serialize(), function (data) {
if (data.Error != '') {
alert(data.Error);
}
else {
// Add the new genre to the dropdown list and select it
$('#GenreId').append(
$('<option></option>')
.val(data.Genre.GenreId)
.html(data.Genre.Name)
.prop('selected', true) // Selects the new Genre in the DropDown LB
);
$('#genreDialog').dialog('close');
}
});
}
},
Vybere se var createGenreForm
z createGenreForm
ID. ID createGenreForm
bylo nastaveno v následujícím kódu nalezen v souboru Views\Žánr\_CreateGenre.cshtml .
@model MvcMusicStore.Models.Genre
@using (Html.BeginForm("Create", "Genre", FormMethod.Post, new { id = "createGenreForm" }))
{
@*Omitted for clarity.*@
}
Přetížení pomocné rutiny Html.BeginForm použité v Views\Žánr\_CreateGenre.cshtml generuje HTML s atributem akce obsahujícím adresu URL pro odeslání formuláře. Můžete to zobrazit tak, že v prohlížeči zobrazíte stránku pro vytvoření alba a v prohlížeči vyberete zobrazit zdroj. Následující kód ukazuje vygenerovaný kód HTML obsahující značku formuláře.
<form action="/StoreManager/Create" method="post">
Řádek jQuery $.post
provede volání AJAX atributu akce (/StoreManager/Create
) a předá data z dialogového okna Vytvořit žánr . Data se skládají z názvu nového žánru a volitelného popisu. Pokud je volání AJAX úspěšné, nový název a hodnota žánru se přidají do značky Select a nový žánr se nastaví na vybranou hodnotu. Vzhledem k tomu, že se jedná o dynamicky generované značky, není možné novou možnost výběru zobrazit zobrazením zdroje v prohlížeči. Nový kód HTML můžete zobrazit pomocí vývojářských nástrojů IE 9 F12. Pokud chcete zobrazit novou možnost výběru, stiskněte v Internet Exploreru 9 klávesu F12 a spusťte vývojářské nástroje F12. Přejděte na stránku Vytvořit a přidejte nový žánr, aby byl nový žánr vybrán v seznamu pro výběr žánru. V vývojářských nástrojích F12:
Vyberte kartu HTML.
Stiskněte ikonu aktualizace.
Do vyhledávacího pole zadejte Id žánru.
Pomocí další ikony
přejděte na následující značku výběru:<select name="GenreId" id="GenreId" >
Rozbalte hodnotu poslední možnosti.
Následující kód v souboru Scripts\chooseGenre.js ukazuje, jak se tlačítko Přidat nový žánr připojí k události kliknutí a jak se vytvoří dialogové okno Přidat nový žánr .
$('#genreAddLink').click(function () {
var createFormUrl = $(this).attr('href');
$('#genreDialog').html('')
.load(createFormUrl, function () {
// The createGenreForm is loaded on the fly using jQuery load.
// In order to have client validation working it is necessary to tell the
// jQuery.validator to parse the newly added content
jQuery.validator.unobtrusive.parse('#createGenreForm');
$('#genreDialog').dialog('open');
});
return false;
});
První řádek vytvoří funkci kliknutí připojenou k tlačítku Přidat nový žánr . Následující kód ze souboru Views\StoreManager\_ChooseGenre.cshtml ukazuje, jak se vytvoří tlačítko Přidat nový žánr :
<a class="button" href="@Url.Content("~/Genre/Create")"
id="genreAddLink">Add New Genre</a>
Metoda načtení vytvoří a otevře dialogové okno Přidat žánr a zavolá metodu jQuery parse
tak, aby ověření klienta proběhlo u dat zadaných v dialogovém okně.
V této části jste se dozvěděli, jak vytvořit dialogové okno, které se dá použít k přidání nových dat kategorií do seznamu výběru. Stejným postupem můžete vytvořit uživatelské rozhraní pro přidání nového interpreta do seznamu pro výběr interpreta. V tomto kurzu jsme získali přehled práce s pomocnými rutinami html ASP.NET MVC. Další informace o práci s rozevíracím seznamem najdete v části s dalšími odkazy níže. Dejte nám prosím vědět, jestli byl tento kurz užitečný.
Další odkazy
- ASP.NET MVC –Cascading Dropdown Lists Tutorial by Radu Enuca
- Zvolili jste modul plug-in JavaScript, který podporuje vícenásobný výběr a filtrování.
Přispěvatelé
- Radu Enuca
- Jean-Sébastien Goupil
- Brad Wilson
Revidující
- Jean-Sébastien Goupil
- Brad Wilson
- Mike Pope
- Tom Dykstra