constructeur d'entrée pour un DropDownList avec des données de DB dans contrib mvc
-
19-09-2019 - |
Question
J'ai quelque chose comme ça
public class Person
{
public Country {get; set;}
}
public class PersonInput
{
public ImNotSureWhatShouldIUseHere Country {get; set;}
}
il est un constructeur d'entrée pour énumérations dans contrib mvc mais ce n'est pas bon pour moi parce que je récupère les données de la DB et j'enregistrer l'identifiant de l'élément sélectionné pas la valeur
La solution
i réussi à faire un constructeur d'entrée de mon propre, il ressemble à ceci
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/InputBuilders/Field.Master"
Inherits="System.Web.Mvc.ViewPage<PropertyViewModel<object>>" %>
<%@ Import Namespace="MvcContrib.UI.InputBuilder.Views"%>
<%@ Import Namespace="System.Web.Mvc.Html"%>
<asp:Content ID="Content2" ContentPlaceHolderID="Input" runat="server">
<%=Html.DropDownList(Model.Name, Model.Value as IEnumerable<SelectListItem>)%>
</asp:Content>
et la propriété dans la classe d'entrée, il est comme ceci:
[PartialView("MySelectList")]
public IEnumerable<SelectListItem> Om { get { return new SelectList(Web.Models.DataGenerator.Persons, "Id", "Name", 2); } }
Autres conseils
Je vais essayer de résumer ce que je compris de votre question: vous avez une table base de données qui contient countries
colonnes id
et name
que vous souhaitez lier à un élément select
dans une vue. Si cela est correct, vous pouvez essayer de faire quelque chose comme ceci:
public ActionResult Index()
{
IEnumerable<Country> countries = FetchCountriesFromDB();
var model = new SelectList(countries, "Id", "Name", null);
return View(model);
}
Et selon vous fortement typé:
<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<System.Web.Mvc.SelectList>" %>
...
<%= Html.DropDownList("country", Model) %>
et enfin vous pourriez avoir une action que vous publiez sur:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Index(string country)
{
// country will contain the selected country id
...
}