L'affichage des données dans un SelectList dans ASP.NET de Base
J'ai tenté quelques approches différentes. Je ne sais pas pourquoi mais mon SelectList/Déroulante est vide. Il ne montre pas de données. Je ne suis pas sûr de l'endroit où je vais mal.
J'ai un ASP.NET de Base de l'App. Entity Framework De Base. Db Première. Je suis à l'aide d'un modèle de référentiel.
Voici mon Modèle de Classe
public partial class Commodity
{
public Guid Oid { get; set; }
public string Code { get; set; }
}
C'est mon Interface:
interface ICommodityRepository
{
IEnumerable<Commodity> GetAll();
}
Mon Référentiel:
public class CommodityRepository : ICommodityRepository
{
private ltgwarehouseContext context;
public CommodityRepository()
{ }
public IEnumerable<Commodity> GetAll()
{
return context.Commodity.ToList();
}
}
Mon Contrôleur:
public class CommoditiesController : Controller
{
static readonly CommodityRepository commodities = new CommodityRepository();
public CommoditiesController(CommodityRepository commodities)
{ }
//GET: /<controller>/
public IEnumerable<Commodity> CommoditiesList()
{
return commodities.GetAll();
}
}
C'est mon point de Vue/le Balisage HTML:
@model Lansing.BasisMap.Domain.Models.Commodity
HTML:
<li><select asp-for="@Model.Code" asp-controller="Commodities" asp-action="CommoditiesList"></select> </li>
Vous devez vous connecter pour publier un commentaire.
(Je ne suis pas trop familier avec le Tag Helper syntaxe dans ASP.NET de Base, mais je vais donner un coup de feu, n'importe qui s'il vous plaît corrigez-moi si je me trompe)
asp-for=""
attribut n'a pas besoin de la@
préfixe parce qu'il n'est pas Rasoir code, la valeur de l'attribut est déjà géré par ASP.NET's l'analyseur, vous n'aurez besoin que si vous utilisez la syntaxe C# qui est ambiguë avec le HTML (par exemple, double-quotes).asp-controller
etasp-action
attributs ne s'appliquent pas à<select>
<select>
, utilisez leasp-items
attribut et de fournirIEnumerable<SelectListItem>
ou unSelectList
instance. Ce peut être transmise par le biais de votreViewModel
ou (ma préférence) à traversViewData
(ouViewBag
).En supposant que c'est
ViewData
, puis:Et de l'utiliser en vue comme:
Il y a beaucoup plus d'exemples dans ce QA affichage: Sélectionnez la Balise aide dans ASP.NET Core, MVC
Il est peut-être parce que vous n'êtes pas à l'injection de la base de données dans votre
CommodityRepository
. Vous devez ajouter le paramètre du constructeur afin de la DI de travail.Alors, si vous voulez l'avoir rempli automatiquement et injecté dans votre contrôleur, vous devez l'enregistrer dans le Démarrage.cs à l'aide de l'un des
services.Addxxx
méthodes. Je vous recommande de donner la DI documentation un lire comme il l'expliquera mieux que je peux.Votre contrôleur final devrait ressembler à quelque chose comme ceci:
Essayez ceci:
En vue:
Dans le contrôleur:
Dans le modèle: