Уже несколько недель я борюсь с тем, что должно быть очень просто. Я просто хочу создать раскрывающийся список на 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 ... и я не понимаю, почему он не будет работать, когда я включаю список в модель.
Я также видел, что есть много людей, у которых, кажется, есть проблемы с этой простой задачей, но в моем поиске в Google ... Я не встречал никого с такой же ошибкой при попытке создать раскрывающийся список.
Я был бы признателен за любые предложения, которые вы или кто-либо может иметь. Единственное, что я придумал, так это то, что конструктор SelectList принимает параметр типа System.Collections.IEnumerable и то, что я пытаюсь ему передать, это System.Collections.Generic.IEnumerable... или что-то близкое к нему... и я не знаю, как чтобы отлить его соответствующим образом ... хотя я не думаю, что мне нужно ... если он работает с сумкой для просмотра в качестве средства передвижения, почему это не работает с моделью в качестве средства передвижения?
Спасибо,
РЕДАКТИРОВАТЬ: ======================
Проблема заключалась в типе объекта, который мог бы принять конструктор selectList. По какой-то причине он не принял бы общий IQueryable, но когда я привел результат из структуры сущностей, используя метод расширения приведения toArray, он внезапно сработал.
Так моя модель становится...
проект открытого класса { общественный проект () {
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 кажется обязательным.