costruttore di ingresso per una DropDownList con i dati dal DB in contrib mvc
-
19-09-2019 - |
Domanda
Ho qualcosa di simile
public class Person
{
public Country {get; set;}
}
public class PersonInput
{
public ImNotSureWhatShouldIUseHere Country {get; set;}
}
c'è un costruttore di ingresso per enumerazioni in contrib MVC, ma non va bene per me perché io recuperare i dati dal DB e risparmio il Id dell'elemento selezionato non il valore
Soluzione
Sono riuscito a fare un costruttore di ingresso del mio, sembra che questo
<%@ 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>
e la proprietà nella classe di ingresso è come questo:
[PartialView("MySelectList")]
public IEnumerable<SelectListItem> Om { get { return new SelectList(Web.Models.DataGenerator.Persons, "Id", "Name", 2); } }
Altri suggerimenti
Vorrei cercare di ricapitolare quello che ho capito dalla tua domanda: avete una tabella countries
database che contiene le colonne id
e name
che si desidera associare ad un elemento select
in una vista. Se questo è corretto si potrebbe provare a fare qualcosa di simile:
public ActionResult Index()
{
IEnumerable<Country> countries = FetchCountriesFromDB();
var model = new SelectList(countries, "Id", "Name", null);
return View(model);
}
E secondo lei fortemente tipizzato:
<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<System.Web.Mvc.SelectList>" %>
...
<%= Html.DropDownList("country", Model) %>
e, infine, si potrebbe avere un'azione che si posta a:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Index(string country)
{
// country will contain the selected country id
...
}