2009-06-24 1 views
0

Я не могу получить значение списка выбора, чтобы заполнить значение родительского объекта. Я использую объект-оболочку для привязки, чтобы иметь доступ к значениям, необходимым для SelectList, а также к объекту, которому требуется значение. Я готов поспорить, что у меня нет чего-то основного, но я не могу его найти.Списки поиска с NHibernate и ASP.Net MVC

У меня есть эти модели:

public class Status 
    { 
     public virtual int Id { get; protected set; } 
     public virtual string Name { get; set; } 
     public virtual bool IsClosed { get; set; } 

     public override string ToString() 
     { 
      return Name; 
     } 
    } 
    public class Issue 
    { 
     public virtual int Id { get; protected set; } 
     public virtual string Title { get; set; } 
     public virtual string Description { get; set; } 
     public virtual Status Status { get; set; } 
     public virtual DateTime CreatedOn { get; set; } 
     public virtual DateTime UpdatedOn { get; set; } 

    } 

И в FormViewModel (из примеров NerdDinner) содержит в себе список Статусы

public class IssueFormViewModel 
    { 
     public Issue Issue { get; set; } 
     public SelectList Statuses { get; set; } 
     public IssueFormViewModel(Issue issue, IList<Status> statuses) 
     { 
      Issue = issue; 
      Statuses = new SelectList(statuses, "Id", "Name", statuses[1].Id); 
     } 

     public IssueFormViewModel() { } 

    } 

Моя страница действия на внешний вид контроллера, как ...

public ActionResult Create() 
    { 
     IList<Status> statuses; 
     Issue issue = new Issue(); 
     // NHibernate stuff getting a List<Status> 
     return View(new IssueFormViewModel(issue,statuses)); 
    } 
    [AcceptVerbs(HttpVerbs.Post)] 
    public ActionResult Create(IssueFormViewModel issueFormView) 
    { // At this point issueFormView.Issue.Status == null 
     // ... 
    } 

Объект «Моя проблема» частично связан, за исключением статуса, использующего эти имена в Вид:

<p> 
      <label for="Issue.Title">Title:</label> 
      <%= Html.TextBox("Issue.Title", Model.Issue.Title)%> 
      <%= Html.ValidationMessage("Title", "*") %> 
     </p> 
<p> 
      <label for="Statuses">Status:</label> 
      <!-- also tried "Issue.Status" --> 
      <%= Html.DropDownList("Statuses", Model.Statuses)%> 
      <%= Html.ValidationMessage("Status", "*")%> 
     </p> 

ответ

0

Как и ожидалось - это было просто.

Я изменил взгляд выглядеть следующим образом:

<label for="Status.Id">Status:</label> 
    <%= Html.DropDownList("Status.Id", Model.Statuses)%> 
    <%= Html.ValidationMessage("Status.Id", "*")%> 

и контроллер подпись, чтобы принять «вопрос» (не может связываться с SelectList!)

[AcceptVerbs(HttpVerbs.Post)] 
    //public ActionResult Create(IssueFormViewModel issueFormView) 
    public ActionResult Create(Issue issueToAdd) 
    { 

И в моем сообщении -Создание действия У меня проблема с статусом. Хотя статус недействителен (он содержит только идентификатор). Поэтому, прежде чем этот вопрос совершали в БД, я поставил issueToAdd так:

issueToAdd.Status = (from p in GetAllStatuses() 
         where p.Id == issueToAdd.Status.Id 
         select p).First(); 

Edit: И получается, что я даже не нужно принести «правильный» объект состояния. Это связано с Id, и это достаточно хорошо.

0

Я попробовал выпадающий список на моем компьютере, и она работает, вы должны убедиться, что NHibernate приносит назад больше чем 1 деталь, как ваш код пытается установить выбранный элемент будет вторым пунктом.

Statuses = new SelectList(statuses, "Id", "Name", statuses[1].Id); 

Помните, что перечислены индексы с нулевым индексом.

+0

Хороший улов, но я не получал исключение OutOfBounds. Я гарантировал, что у меня было больше 1 ценности ради тестирования. – hometoast