Конструктор входных данных для выпадающего списка с данными из базы данных в mvc contrib
-
19-09-2019 - |
Вопрос
У меня есть что-то вроде этого
public class Person
{
public Country {get; set;}
}
public class PersonInput
{
public ImNotSureWhatShouldIUseHere Country {get; set;}
}
в mvc contrib есть конструктор ввода для перечислений, но это не очень хорошо для меня, потому что я извлекаю данные из базы данных и сохраняю идентификатор выбранного элемента, а не значение
Решение
мне удалось создать собственный конструктор входных данных, он выглядит примерно так
<%@ 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>
а свойство во входном классе выглядит примерно так:
[PartialView("MySelectList")]
public IEnumerable<SelectListItem> Om { get { return new SelectList(Web.Models.DataGenerator.Persons, "Id", "Name", 2); } }
Другие советы
Позвольте мне попытаться резюмировать то, что я понял из вашего вопроса:у вас есть таблица базы данных countries
который содержит столбцы id
и name
которые вы хотели бы привязать к select
элемент в представлении.Если это правильно, вы могли бы попробовать сделать что-то вроде этого:
public ActionResult Index()
{
IEnumerable<Country> countries = FetchCountriesFromDB();
var model = new SelectList(countries, "Id", "Name", null);
return View(model);
}
И в вашем строго типизированном представлении:
<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<System.Web.Mvc.SelectList>" %>
...
<%= Html.DropDownList("country", Model) %>
и, наконец, у вас могло бы быть действие, на которое вы отправляете сообщение:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Index(string country)
{
// country will contain the selected country id
...
}