FrankStubbs Ответов: 1

Как получить выпадающий список для отображения значения из базы данных, а не из списка выбора?


Я использую asp.net mvc с code first entity framework. Выпадающий список сохраняет выбранное значение в базе данных, но когда я возвращаюсь на страницу, он просто показывает значения списка выбора из модели.

Что я уже пробовал:

Модель
------------
public class myRating
   {
       public int fRatingId { get; set; }
       public string Desc { get; set; }

       public IEnumerable<SelectListItem> listRatings { get; set; }
   }


Контроллер
----------------
public List<SelectListItem> GetRatingList()
        {
            var ratingList = db.fRatings.ToList()
                .Select(d => new SelectListItem
                {
                    Value = d.fRatingId.ToString(),
                    Text = d.Desc
                });
            return ratingList.ToList();

        }


model.listRatings = GetRatingList();


Смотреть
--------------
@foreach (var item in Model.myDpExercises)
<tr>
    <td>
        @Html.DisplayFor(modelitem => item.Exercise)
    </td>
       <td>

                        @Html.DropDownListFor(modelItem => item.RatingId,Model.listRatings, "--Please Select--", new { id = "ddlRating", onchange = "UpdateRating(this)", data_mydpexid = item.Id })
                        
                    </td>
</tr>

Richard Deeming

Проблема в том, что опция "--Please Select--" всегда выбрана? Это было бы потому, что вы не установили Selected недвижимость на любом из SelectListItem предметы.

Но из вашего кода не ясно, как вы узнаете, какой элемент выбрать.

1 Ответов

Рейтинг:
0

dnxit

Хотя ваш вопрос не совсем ясен в чем проблема из чего я понял

when I go back to the page it just shows the select list values from the model.

это вы не перенаправляете после успешной записи обратно в базу данных, поэтому вы хотите вставить другую запись в то же представление. MVC обычно поддерживает состояние модели выбранных данных, и если вы хотите очистить форму после успешного поста назад, то вы можете очистить состояние модели.
напр.
[HttpPost]
public ActionResult Create(CreateRequest request)
{
    var vm = new CrateViewMModel();

    if (ModelState.IsValid && Save to db was success)
    {
        vm.ResultMessage = "Success";

        return View("Create",vm);
    }

    ModelState.Clear(); // add this if you want to clear for all controls
    ModelState.Remove("IsActive"); // if just want to clear one control

    return View(vm);
}