#c# #asp.net-mvc #html.dropdownlistfor
#c# #asp.net-mvc #html.dropdownlistfor
Вопрос:
Я уверен, что это простая вещь, которую мне не хватает. Я пытался добавить выпадающий список в Create.cshtml с целью заполнения списка из базы данных. Для эксперимента я выбрал следующее: два класса, соответствующие таблицам базы данных, которые имеют значения.
namespace MvcTestApplication.Models
{
public class Complaints
{
public int ID { get; set; }
public string User { get; set; }
public DateTime ReleaseDate { get; set; }
public string Nature { get; set; }
public string Month { get; set; }
public string Year { get; set; }
public string Account { get; set; }
public string Employee { get; set; }
public string Manager { get; set; }
public int CompanyID { get; set; }
public int CompanyNumID { get; set; }
public int DepartmentID { get; set; }
public int ClientID { get; set; }
public int ClientCodeID { get; set; }
public string Source { get; set; }
public string Status { get; set; }
public virtual ICollection<Company> Companies{ get; set; }
}
namespace MvcTestApplication.Models
{
public class Company
{
public int CompanyID { get; set; }
public string CompanyName { get; set; }
public bool enabled { get; set; }
}
}
затем DAL
namespace MvcTestApplication.DAL
{
public class ComplaintDBContext : DbContext
{
public DbSet<Complaints> Complaints { get; set; }
}
На странице create.cshtml я просто хочу иметь возможность заполнить выпадающий список компаниями (еще много выпадающих списков после того, как я заработаю), но пока я всегда получаю нулевую ссылку всякий раз, когда пытаюсь. В create actionresult я попытался передать новую модель жалоб, только модель жалоб, мне не хватает, как заполнить коллекцию компаний.
<div class="editor-label">
@Html.LabelFor(model => model.ReleaseDate)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.ReleaseDate, new { id = "release_date" })
@Html.ValidationMessageFor(model => model.ReleaseDate)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Source)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Source)
@Html.ValidationMessageFor(model => model.Source)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.CompanyID)
</div>
<div class="editor-field">
@Html.DropDownListFor(model => model.CompanyID , new SelectList(Model.Companies , "CompanyID", "CompanyName"), "-- Select Company--")
@Html.ValidationMessageFor(model => model.CompanyID)
</div>
Комментарии:
1. Сначала я делаю код для таблиц, и я убедился, что там есть данные. На индексной странице перечислены примеры жалоб, с которыми я правильно заполнял таблицу.
2. Думаю, я должен добавить, что это было бы неплохо иметь и в режиме редактирования (выпадающие списки)
3. Я думаю, что у меня получилось: public ActionResult Create() { List<Company> comps = db.Companies . ToList(); return View(новые жалобы { Nature = «test this», Source = «Email», ReleaseDate = DateTime. Теперь, Companies = comps }); //return View(); }
4. и теперь я пытаюсь работать над тем, как отобразить значение companyid (companyname) в индексном представлении.
Ответ №1:
Я думаю, вам нужно создать шаблон для ваших жалоб на сложные типы объектов. Что-то вроде этого должно помочь вам начать определять пользовательский шаблон редактора для жалоб. Это будет автоматически отображаться для каждого элемента в коллекции жалоб.
Вам нужно сохранить его в ~/Views/Shared/EditorTemplates/Complains.cshtml:
@model Complaints
<div>
@Html.LabelFor(x => x.id):
@Html.EditorFor(x => x.id)
@Html.LabelFor(x => x.Nature):
@Html.EditorFor(x => x.Nature)
@Html.LabelFor(x => x.ReleaseDate):
@Html.EditorFor(x => x.ReleaseDate)
@Html.LabelFor(x => x.Source):
@Html.EditorFor(x => x.Source)
@Html.LabelFor(x => x.Status):
@Html.EditorFor(x => x.Status)
</div>
Для нас просто напишите:
@Html.EditorFor(model => model.Complaints)