Я боролся с тем, что должно быть очень простой вещью уже несколько недель.Я просто хочу создать выпадающий список на html-странице asp.net mvc 3 razor и хочу, чтобы данные для выпадающего списка были получены из модели.
Моя модель выглядит следующим образом, который находится в пространстве имен Models.Project.
public class Project
{
public Project()
{
CategoryId = 0;
Name = "";
Description = "";
//Categories = new Dictionary<int, string>();
Entities _db = new Entities(); //ef4
CateogoriesList = from c in _db.Categories
orderby c.Name
select c.Name;
}
public int CategoryId { get; set; }
[Required]
[DataType(DataType.Text)]
[Display(Name = "Project Name")]
public string Name { get; set; }
[Required]
[DataType(DataType.MultilineText)]
[Display(Name = "Project Description")]
public string Description { get; set; }
public IQueryable<string> CateogoriesList;
}
Мое действие контроллера выглядит следующим образом:
public ActionResult Create()
{
Models.Project.Project proj = new Models.Project.Project();
return View(proj);
}
Мое представление Razor имеет следующий соответствующий код ...
@{
ViewBag.Title = "Create";
Layout = "~/Views/Shared/_Layout.cshtml";
}
@model Models.Project.Project
@using (Html.BeginForm())
{
@Html.ValidationSummary(true);
<fieldset>
<legend>Submit Your Request</legend>
<div class="editor-label">@Html.LabelFor( Model => Model.CateogoriesList )</div>
<div class="editor-field">
@Html.DropDownList("Category", new SelectList( Model.CateogoriesList ) )
</div>
</fieldset>
<p><input type="submit" value="Send for RFP" /></p>
}
Проблема заключается в том, что я получаюследующая ошибка ...
Compiler Error Message: CS0135: 'Model' conflicts with the declaration 'System.Web.Mvc.WebViewPage<TModel>.Model'
Я видел следующий клип, чтобы он работал с ViewBag ... и я не понимаю, почему он не работает, когда я включаюсписок в модели.
http://www.pluralsight -training.net / microsoft / Players / PSODPlayer.aspx? Author = scott-allen & name = mvc3-building-data-i & mode = live & clip = 0 & course = aspdotnet-mvc3-intro
Я также видел, что есть много людей, которые, кажется, имеют проблемы с этой простой задачей, но в моем поиске ... Я не встречал никого с такой же ошибкой в попытке создатьвыпадающий список.
Буду признателен за любые предложения, которые вы или кто-то может иметь.Единственное, что я придумал, это то, что конструктор SelectList
принимает параметр типа System.Collections.IEnumerable
, и я пытаюсь передать его как S ystem.Collections.Generic.IEnumerable
... или что-то похожее на него ...и я не знаю, как правильно его кастовать ... хотя я не думаю, что мне нужно ... если он работает с сумкой для просмотра как средством передвижения, почему он не работает с моделью как средствомтранспорта?
Спасибо,
РЕДАКТИРОВАТЬ: ======================
Проблема быладелать с типом объекта, который принимает конструктор selectList.По какой-то причине он не принял бы универсальный IQueryable, но когда я приводил результат из структуры сущностей с использованием метода расширения приведения к массиву, он неожиданно работал.
Итак, моя модель становится ...
открытый класс Project {public Project () {
Riebro.RiebroEntities _db = new Riebro.RiebroEntities();
CategoriesList = (from c in _db.Categories
orderby c.Name
select c.Name).ToArray<string>();
}
[Display(Name = "Choose a category")]
public string[] CategoriesList;
}
обратите внимание на массив .ToArray наконец запроса, а затем внезапно
@Html.DropDownList("Category", new SelectList(Model.CategoriesList))
работает.Хотя я собираюсь указать на то, что здесь требуется ключевое слово Model.