mvc - выпадающий список не заполняется правильно в режиме редактирования - PullRequest
3 голосов
/ 06 мая 2009

Я создаю свое первое приложение MVC, выполнив учебное пособие «NerdDinner». Однако при создании выпадающего списка из списка SelectList у меня возникает проблема.

По какой-то причине, когда я открываю представление «Редактировать», раскрывающийся список не отображает правильный выбор, даже если в базе данных установлены иные данные, а представление «Детали» показывает правильное значение. Каждый из них просто предлагает первое значение в списке.

Я проходил фрагмент кода NerdDinner по кусочкам и не вижу разницы, хотя это приложение правильно отображает выпадающее меню с текущим значением при редактировании, а мое - нет.

У кого-нибудь есть предложение, куда идти дальше? Я могу опубликовать фрагменты кода, если кто-то попросит что-то конкретное.

Обновление:

В наборе полей:

        <p>
            <label for="Parking">Parking Arrangement:</label>
            <%= Html.DropDownList("Parking", Model.Parking)%>
            <%= Html.ValidationMessage("Parking", "*") %>
        </p>

Действие Изменить:

    //
    // GET: /Buyer/Edit/2
    public ActionResult Edit(int id)
    {
        Buyer_Profile buyer_profile = buyerRepository.GetBuyerProfileByID(id);

        if (buyer_profile == null)
            return View("NotFound");
        else if (!buyer_profile.IsOwnedBy(User.Identity.Name, id))
            return RedirectToAction("Index", "Home");
        else
            return View(new BuyerFormViewModel(buyer_profile));
    }

Точно так же, как они конструируют его для примера NerdDinner, я создал '... FormViewModel':

public class BuyerFormViewModel
{
    // Properties
    public Buyer_Profile Buyer_Profile { get; private set; }
    public SelectList Parking { get; private set; }

    // Constructor
    public BuyerFormViewModel(Buyer_Profile buyer_profile)
    {
        Buyer_Profile = buyer_profile;
        Parking = new SelectList(BuyerProfileOptions.Parking, Buyer_Profile.Parking);
    }
}

И сгенерированный HTML при нажатии на «редактировать», когда значение уже отображается в подробном представлении и сохраняется в д / б:

<p>
  <label for="Parking">Parking Arrangement:</label>
  <select id="Parking" name="Parking"><option>No Preference</option>
  <option>On Street</option>
  <option>Assigned Street</option>
  <option>Open Garage</option>
  <option>Covered Garage</option>
  </select>                
</p>

Текстовые поля в одной форме имеют правильные значения. Это просто выпадающие списки, которых нет!

Большое спасибо за ваше внимание.

Ответы [ 2 ]

2 голосов
/ 10 мая 2009

Ха. Похоже, что htmlhelper СЛИШКОМ хорош. Я удалил ссылки на модель и все работает!

т.е.

 <%= Html.DropDownList("Parking", Model.Parking)%>

становится

 <%= Html.DropDownList("Parking")%>

и мы золотые. Это то, что ViewData содержит что-то под названием «Парковка», потому что я ссылаюсь на это в модели, чтобы оно давило другое значение ... или что-то ...?

1 голос
/ 14 января 2011

Быстрый совет для людей - не называйте ни одно из свойств вашей модели "Заголовок", когда им нужен раскрывающийся список. Фреймворк будет перепутан с заголовком представления и не будет работать - я потратил целый день на то, чтобы вырвать себе волосы. Нужно было спать, чтобы понять, что происходит.

...