Ok, donc je suis nouveau dans tout ce monde MVC, mais cela semble être un assez bon moyen de faire avancer les choses et j'essaie de le faire fonctionner ici.
Le problème est: je ne peux pas obtenir les données de ma table dans ma base de données SQL vers un simple formulaire déroulant sur ma page d'inscription.
Je n'ai aucune idée où mettre les trucs, où coder pour ouvrir la table, sélectionner les identifiants, où mettre le response.write
et comment l'envoyer à la vue?
Mon modèle est le suivant:
public class users
{
public string name {get; set;}
public int user_id {get; set;}
}
Mon contrôleur est le suivant:
[HttpGet]
public ActionResult ListUser()
{
return View();
}
Et ma vue est la suivante:
@model Community.Models.users
J'ai googlé pendant 2 jours maintenant et regardé plusieurs vidéos sur youtube, mais inutile, je ne le trouve pas. S'il vous plaît, quelqu'un avec des connaissances ici? Et s'il vous plaît, dirigez-moi vers de bons tutoriels et/ou forums où je peux parcourir pour plus de questions que je pourrais avoir
Toujours pas de chance sur ce projet ..
Je crée un formulaire et dans ce formulaire, je veux une boucle db (IEnumerable
) .. Mais le modèle actuel n'est pas un IEnumerable
. Je suis à peu près coincé, j'ai regardé un tas de tutoriels et ils listent tous UNE connexion, et si je veux deux modèles?
Voici mon contrôleur, je comprends que vous devez passer une liste à la vue, non?
public ActionResult Registration()
{
return View(db.users.ToList());
}
Comment puis-je obtenir cette liste dans ma vue sans un modèle IEnumerable
?
@neoistheone, votre exemple ne m'a pas beaucoup aidé, ma base de données s'ouvre comme ceci:
private DataBaseContext db = new DataBaseContext();
et je ne sais pas comment, mais cela ouvre la connexion. J'ai essayé pendant tant d'heures maintenant, c'est juste idiot, je n'ai pas dormi si longtemps!
Je suis habitué à programmer ASP-Classic fyi, et c'est ma première tentative sérieuse de mettre à niveau mes connaissances sur la programmation d'un langage à jour et de la POO.
Ajoutez le SelectList
à votre modèle:
public SelectList DropDownList { get; set; }
construire la classe pour cette collection:
public class MyListTable
{
public string Key { get; set; }
public string Display { get; set; }
}
puis dans votre contrôleur, chargez les données de la classe MyListTable
à partir de la base de données:
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");
et enfin, vous devez envoyer votre modèle à la vue:
return View(model);
Maintenant, dans le rasoir, vous pouvez afficher ceci:
@Html.DropDownListFor(m => Model.DropDownList);
Vous pouvez bien sûr nommer ces choses de meilleurs noms, mais vous avez l'idée.
Il y a déjà de bonnes réponses mais voici une autre approche.
Vous utiliserez user
comme modèle, ListUserViewModel
comme modèle d'affichage et UserController
comme contrôleur. Le travail de view-model consiste à transporter toutes les informations nécessaires pour être affichées sur la page à partir du contrôleur sans ajouter de propriétés indésirables dans la classe de modèle. Dans votre cas, liste des utilisateurs de la base de données dans la liste déroulante.
Modèle:
public class User //By the way use singular when naming a class
{
public string name {get; set;}
public int user_id {get; set;}
}
Modèle de vue
public class ListUserViewModel
{
public list<User> Users{get; set;}
}
Manette
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);
}
}
Utilisez maintenant ListUserViewModel au lieu de User dans votre vue en tant que modèle
@model Community.Models.ListUserViewModel
et le menu déroulant
@Html.DropDownListFor(m => m.Users, new SelectList(Model.Users, "user_id", "name"), " ")
Explication:
Vous créez une liste déroulante pour les utilisateurs avec Model.Users
comme source de données de liste de sélection. "user_id"
comme valeur de l'utilisateur sélectionné et "name"
comme étiquette d'affichage. le dernier argument (j'ai mis une chaîne vide " "
) est une valeur par défaut que la liste déroulante affichera avant la sélection.
J'espère que cela vous aidera, vous ou quelqu'un d'autre.
Essaye ça,
modèle
public string CoutryID { get; set; }
public List<SelectListItem> CountryList { get; set; }
Méthode du contrôleur qui remplit la liste
public List<Country> getCountryList()
{
using (QRMG_VendorPortalDataContext _context = new QRMG_VendorPortalDataContext())
{
return (from c in _context.Countries
where c.IsDeleted == false
select c).ToList();
}
}
Liste déroulante dans la vue
@Html.DropDownListFor(m => m.CoutryID,
new SelectList(Model.CountryList,
"CoutryID", "Value"))
Si vous êtes vraiment nouveau sur ASP.Net MVC, c'est un très bon tutoriel qui vous montre comment fonctionne le modèle MVC.
MVC3: http://www.asp.net/mvc/tutorials/getting-started-with-aspnet-mvc3/cs/intro-to-aspnet-mvc-
MVC4: http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/intro-to-aspnet-mvc-4 =
Voici l'exemple de code à télécharger: http://code.msdn.Microsoft.com/Introduction-to-MVC-3-10d1b098
ceci est une vidéo utile: http://www.asp.net/mvc/videos/mvc-1/conference-presentations/creating-nerddinnercom-with-Microsoft-aspnet-model-view-controller-mvc
Je trouve que ce système fonctionne (et évite d'utiliser ViewBag):
Voir le modèle:
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; }
}
Contrôleur:
// 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);
et dans la vue:
@Html.DropDownListFor(a => a.YourDropdownSelectedValue, Model.YourDropdownList, "select this text - change this to null to exclude", new { @class = "your-class" })
c'est ma table dans la base de données
regardez-le mon contrôleur d'action
// GET: Letters
public ActionResult Index()
{
ViewBag.LetterStatus = new SelectList(LetterStatusService.GetAllLettersStatus(), "Id", (CultureHelper.GetCurrentCulture() == "ar") ? "NameArabic" : "Name", Request.QueryString["LetterStatus"]);
return View();
}
et dans la vue
@Html.DropDownList("LetterStatus")
le constructeur que j'ai utilisé est
new SelectList(
list<Objlect> myListFromDatabase,
string PropertyNameOfValueInHtml,
string PropertyNameOfDesplayInHtml,
string SelectedItemValue
);
cette ligne Request.QueryString["LetterStatus"]
car j'envoie les éléments sélectionnés dans QuerySrting
et basé sur CurrentCulture
j'ai choisi la colonne à afficher
mais je pense que la meilleure façon de le faire , est d'obtenir ou de créer les éléments, puis de les réitérer pour générer manuellement la balise de sélection. J'ai bien décrit cette approche dans cette réponse
j'espère que cela vous aide