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

È stato utile?

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
    ...
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top