Проблема с загрузкой TempData в DropDownListFor c # mvc .net core - PullRequest
0 голосов
/ 26 сентября 2019

У меня довольно большая форма, которая представляет информацию о посещениях, страховке и процедуре.Мне нужно иметь возможность отказаться от формы, чтобы создать новых пациентов, врачей, страховщиков и т. Д., Если они в настоящее время отсутствуют.Когда я перенаправлен обратно в форму, мне нужно сохранить данные формы плюс все новые данные, которые были добавлены.В настоящее время я использую TempData для хранения значений каждого отдельного свойства в моей модели.Затем я обращаюсь к значению TempData, чтобы заполнить поле «значение» в моих входах.Это прекрасно работает для всех моих полей, включая текст и дату, но выпадающие списки вызывают у меня проблемы.Я использую viewbag для заполнения DropDownListFor, и самое близкое, что я могу получить для достижения того, чего я хочу, это заменить 3-й параметр в DropDownListFor на мои TempData (значение по умолчанию) и установить скрытое поле с моим значением TempData.Это далеко не твердо и очень глючит.Я хочу, чтобы выпадающие списки работали так же, как мои текстовые и даты и время, но нет атрибута «значение» с DropDownListFor.Кто-нибудь знает, как я могу получить эквивалент «значения» в текстовом вводе в контексте DropDownListFor?Это DropDownListFor на мой взгляд

<div class="form-group">
    <label asp-for="InsId" class="control-label">Insurance</label>
    <a style="padding-left:18px;">
       <button asp-controller="Insurances" asp-action="IndexSV" asp-route-id="@ViewBag.NextVisitID" class="btn btn-primary fa fa-plus-circle" style="background-color:#16a085;"></button>
    </a>

    @if (TempData.Peek("InsId") != null)
    {
         var InsName = (string)ViewBag.InsIdName;

         @Html.DropDownListFor(modelItem => modelItem.InsId, (IEnumerable<SelectListItem>)ViewBag.Insurances, InsName, new { style = "width:80%;" })
         <input type="hidden" asp-for="InsId" class="form-control" value="@InsuranceId" />
         <span asp-validation-for="InsId" class="text-danger"></span>
    }
    else
    {
        @Html.DropDownListFor(modelItem => modelItem.InsId, (IEnumerable<SelectListItem>)ViewBag.Insurances, "--SELECT--", new { style = "width:80%;" })
        <span asp-validation-for="InsId" class="text-danger"></span>
    }
</div>

И вот как я получаю свои данные в контроллере

ViewBag.Insurances = _context.Insurance.Select(p => new SelectListItem { Value = p.InsId.ToString(), Text = p.InsCarrierName }).ToList().OrderBy(x => x.Text);

1 Ответ

1 голос
/ 26 сентября 2019

Сначала см. https://www.w3schools.com/tags/att_option_selected.asp - выбранный тег опции в выборе имеет выбранный атрибут.это устанавливается значением первого параметра в DropDownListFor, modelItem.InsId в вашем случае.Установите это значение соответствующим образом перед рендерингом.Взгляните на эту скрипку - здесь выбрано значение выбора public int SelectedProductId { get { return 2; }}.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...