2013-09-04 18 views
11

Ok, więc jestem nowy w tym całym świecie MVC, ale wydaje się, że to całkiem dobry sposób na załatwianie spraw i staram się, aby działało tutaj.Lista rozwijana ASP.NET MVC z bazy danych

Problem: Nie mogę pobrać danych z mojej tabeli w bazie danych SQL do prostego formularza na mojej stronie rejestracji.

Po prostu nie mam pojęcia, gdzie umieścić materiał, gdzie kodować, aby otworzyć stół, wybrać identyfikatory, gdzie umieścić response.write i jak wysłać go do widoku?

moim modelu to:

public class users 
{ 
    public string name {get; set;} 
    public int user_id {get; set;} 
} 

mojego kontrolera to:

[HttpGet] 
    public ActionResult ListUser() 
    { 
     return View(); 
    } 

I moim zdaniem jest to:

@model Community.Models.users 

Mam google przez 2 dni i teraz patrzył kilka filmów na youtube, ale bezużyteczne, nie mogę go znaleźć. Proszę, ktoś z pewną wiedzą tutaj? I proszę wskazać mi kilka dobrych tutoriali i/lub fora, gdzie można wyszukać więcej pytań mógłbym


Wciąż nie ma szczęścia na tym projekcie ..

Tworzę postać i że w ciągu formularz, chcę db-loop (IEnumerable) .. Ale obecny model nie jest IEnumerable. Trochę utknąłem, oglądałem kilka tutoriali i wszystkie one po prostu wymieniają jedno połączenie, a co jeśli chcę dwa modele?

Oto mój kontroler, rozumiem, że musisz przekazać listę do widoku, prawda?

public ActionResult Registration() 
    { 
     return View(db.users.ToList()); 
    } 

Jak mogę zdobyć tej liście moim zdaniem Witout modelu IEnumerable?

@neoistheone, Twój przykład nie zrobił mi wiele pomóc, mój DB otwiera tak:

private DataBaseContext db = new DataBaseContext(); 

i nie wiem jak, ale otwiera połączenie. Próbowałem już od wielu godzin, to po prostu głupie, nie spałem tak długo!

Jestem przyzwyczajony do programowania ASP-Classic fyi i jest to moja pierwsza poważna próba poszerzenia mojej wiedzy na temat programowania aktualnego języka i OOP.

+1

Sprawdź tutaj: http://stackoverflow.com/questions/2396883/asp-net-mvc-populate-a-drop-down-list i tutaj: http://stackoverflow.com/questions/314933/ asp-net-mvc-how-do-i-pass-a-list-from-a-class-in-model-to-a-repeater-in-a-vie –

+1

Sprawdź http://stackoverflow.com/a/10018406/1241400 –

Odpowiedz

16

Dodaj SelectList do modelu:

public SelectList DropDownList { get; set; } 

zbudować klasę dla tej kolekcji:

public class MyListTable 
{ 
    public string Key { get; set; } 
    public string Display { get; set; } 
} 

a następnie w kontrolerze, załadować dane dla klasy MyListTable z bazy danych:

var list = new List<MyListTable>(); 

using (SqlConnection c = new SqlConnection(cString)) 
using (SqlCommand cmd = new SqlCommand("SELECT KeyField, DisplayField FROM Table", c)) 
{ 
    using (SqlDataReader rdr = cmd.ExecuteReader()) 
    { 
     while (rdr.Read()) 
     { 
      list.Add(new MyListTable 
      { 
       Key = rdr.GetString(0), 
       Display = rdr.GetString(1) 
      }); 
     } 
    } 
} 

var model = new users(); 
model.DropDownList = new SelectList(list, "Key", "Display"); 

a następnie, na koniec, musisz wysłać model t O widok:

return View(model); 

Teraz w maszynce można wyświetlać to:

@Html.DropDownListFor(m => Model.DropDownList); 

Ty oczywiście można wymienić te rzeczy lepszych nazw, ale masz pomysł.

+1

To wygląda dobrze, tylko moje połączenie z bazą danych wygląda tak: using (var db = new communityContext()), i nie mam pojęcia, jak "WYBIERZ * OD ......" – Tobias

+1

@Tobias, nie musisz łączyć się z bazą danych w taki sam sposób jak ja. Po prostu daję ci przykład. Nie będziesz w stanie po prostu skopiować i wkleić tego rozwiązania, musisz go oczywiście dopasować, nie piszę twojego oprogramowania - tylko pomagam ci z tym problemem - więc nie ma mowy, żeby kod był po prostu ** pasuje. ** –

+1

@Tobias, tak samo jak wszystkie wiersze z dowolnej tabeli za pomocą 'DbContext'. Masz dostęp do właściwości, która jest dostępna dla tego stołu. Tak jak powiedziałem, musisz to dopasować. Możesz być w stanie pozbyć się klasy 'MyListTable', ponieważ masz' DbContext'. Możesz wysłać "List" tych osób do klasy 'SelectList' i użyć różnych pól klucza i wyświetlacza. Przejrzyj interfejsy API i poznaj je, zrozum ich na abstrakcyjnym poziomie. –

4

Spróbuj tego,

modelu

public string CoutryID { get; set; } 
public List<SelectListItem> CountryList { get; set; } 

metoda kontroler, który wypełnić listę o

public List<Country> getCountryList() 
     { 
      using (QRMG_VendorPortalDataContext _context = new QRMG_VendorPortalDataContext()) 
      { 
       return (from c in _context.Countries 
         where c.IsDeleted == false 
         select c).ToList(); 
      } 
     } 

rozwijanej listy w widoku

@Html.DropDownListFor(m => m.CoutryID, 
     new SelectList(Model.CountryList, 
         "CoutryID", "Value")) 
3
2

to mój stół w bazie

enter image description here

wziąć szukać go mój kontroler Akcja

// GET: Letters 
    public ActionResult Index() 
    { 
     ViewBag.LetterStatus = new SelectList(LetterStatusService.GetAllLettersStatus(), "Id", (CultureHelper.GetCurrentCulture() == "ar") ? "NameArabic" : "Name", Request.QueryString["LetterStatus"]); 
     return View(); 
    } 

iw widoku

@Html.DropDownList("LetterStatus") 

konstruktor użyłem jest

new SelectList(
    list<Objlect> myListFromDatabase, 
    string PropertyNameOfValueInHtml, 
    string PropertyNameOfDesplayInHtml, 
    string SelectedItemValue 
); 

ta linia Request.QueryString["LetterStatus"] bo wysyłanie wybranych elementów ciągu QuerySrting

i na podstawie n CurrentCulture wybrałem co kolumna, aby wyświetlić

a rezultatem są enter image description here

ale myślę, że najlepszym sposobem, aby to zrobić ,,,, jest uzyskanie lub tworzyć przedmioty następnie iteracyjne wyrzucić je do wygenerowania wybierz tag ręcznie. Opisałem to podejście również w this answer

nadziei, że to pomoże Ci

5
Nie

wielkie odpowiedź już jednak Oto kolejny podejście.

Jako model widoku użyty zostanie model user i UserController jako model kontoller. Praca modelu widoku polega na przeniesieniu wszystkich informacji potrzebnych do wyświetlenia na stronie z kontrolera bez dodawania niechcianych właściwości do klasy modelu. W twoim przypadku lista użytkowników z bazy danych z rozwijanej listy.

Model:

public class User  //By the way use singular when naming a class 
{ 
    public string name {get; set;} 
    public int user_id {get; set;} 
} 

Zobacz model

public class ListUserViewModel 
{ 
    public list<User> Users{get; set;} 
} 

Controller

public class UserController : Controller 
{ 
    private DataBaseContext db = new DataBaseContext(); 

    [HttpGet] 
    public ActionResult ListUser() 
    { 
     var users = db.Users.ToList(); 

     var viewModel = new ListUserViewModel { Users = users }; 

     return View(viewModel); 
    } 
} 

Teraz użyj ListUserViewModel zamiast Użytkownika w widoku jako model

@model Community.Models.ListUserViewModel 

i spadek w dół

@Html.DropDownListFor(m => m.Users, new SelectList(Model.Users, "user_id", "name"), " ") 

Objaśnienie:

Podczas tworzenia listy rozwijanej dla użytkowników z Model.Users jak wybrać źródło lista danych."user_id" jako wartość wybranego użytkownika i "name" jako etykieta wyświetlacza. ostatni argument (umieszczam pusty ciąg " ") jest domyślną wartością, która zostanie wyświetlona przed wyborem.

Mam nadzieję, że to pomoże tobie lub komuś innemu.

0

znajdę ten system działa (i unika korzystania ViewBag):

Zobacz Model:

public class YourViewModel 
{ 
    // This could be string, int or Guid depending on what you need as the value 
    public int YourDropdownSelectedValue { get; set; } 
    public IEnumerable<SelectListItem> YourDropdownList { get; set; } 
} 

Kontroler:

// Get database values (by whatever selection method is appropriate) 
var dbValues = db.YourEntity.ToList(); 

// Make Selectlist, which is IEnumerable<SelectListItem> 
var yourDropdownList = new SelectList(dbValues.Select(item => new SelectListItem 
{ 
    Text = item.YourSelectedDbText, 
    Value = item.YourSelectedDbValue 
}).ToList(), "Value", "Text"); 

// Assign the Selectlist to the View Model 
var viewModel = new YourViewModel(){ 
    // Optional: if you want a pre-selected value - remove this for no pre-selected value 
    YourDropdownSelectedValue = dbValues.FirstOrDefault(), 
    // The Dropdownlist values 
    YourDropdownList = yourDropdownList 
}; 

// return View with View Model 
return View(viewModel); 

aw Widok:

@Html.DropDownListFor(a => a.YourDropdownSelectedValue, Model.YourDropdownList, "select this text - change this to null to exclude", new { @class = "your-class" }) 
Powiązane problemy