Выберите раскрывающееся значение после публикации - PullRequest
0 голосов
/ 01 июня 2018

Я надеялся получить какое-то руководство по проблеме с сохранением значения в раскрывающемся списке после записи (бритва)

У меня есть простая страница:

    @model testContingency.Models.ListByWardDD

@{
    ViewBag.Title = "TestDropDowns";
}

<h2>TestDropDowns</h2>

<div>

    @Html.DropDownList("HospModel", Model.Hospital,  new { @onchange = "ChangeHospital(this.value)" }) 
    @Html.DropDownList("WardModel", Model.Wards)

    <script type="text/javascript">

        function ChangeHospital(val) {
            window.location.href = "/PatientListByWardDD/TestDropDowns?hospID=" + val;
        }



    </script>

</div>

вотКонтроллер

public ActionResult TestDropDowns(int? hospID)
    {
        PASInpatientRepository pasRepo = new PASInpatientRepository();
        var returnModel = new ListByWardDD();     
        var HospitalData = pasRepo.GetPatientHospitalsEnum();
        returnModel.Hospital = pasRepo.GetHopspitalListItems(HospitalData);
        var WardData = pasRepo .GetPatientWardsEnum(hospID);
        returnModel.Wards = pasRepo.GetWardListItems(WardData);
        ViewBag.HospSearch = hospID;
        return View(returnModel);
    }

В контроллере PASInpatientRepository() связывается с кеш-базой данных.Он возвращает общедоступный IEnumerable GetHopspitalListItems.Он вызывает хранимые процедуры, написанные в базе данных кэша (по сути, такие же, как и хранимые процедуры sql).Это все работает нормально по-своему.

Проблема, с которой я сталкиваюсь, заключается в том, что когда я выбираю раскрывающийся список @Html.DropDownList("HospModel", Model.Hospital, new { @onchange = "ChangeHospital(this.value)" }) и вызывается контроллер для обновления раскрывающегося списка Wards, я хочу сохранить значение, выбранное в раскрывающемся списке больницы.Я пробовал несколько разных способов, но, признаюсь, я немного застрял.Большинство примеров, которые я нашел, для строго типизированных.

Как я уже упоминал, я новичок в MVC, но любые советы о том, как решить эту проблему, или предложения по улучшению моего кода очень приветствуются.

1 Ответ

0 голосов
/ 01 июня 2018

Так что я не уверен, как выглядит собственность больницы, но я сделаю предположение, что у каждого есть уникальный идентификатор.Кроме того, чтобы связать опубликованные данные с моделью представления, вам необходимо использовать формы в своем представлении.Для создания выпадающего списка используйте DropDownListFor -Helper.Таким образом, данные будут привязаны к вашей модели после отправки формы.

Таким образом, ваше представление может выглядеть примерно так

@model testContingency.Models.ListByWardDD

@{
    ViewBag.Title = "TestDropDowns";
}

<h2>TestDropDowns</h2>

<div>
    @using (Html.BeginForm("TestDropDowns", "YourController", FormMethod.Post))
    {
        @Html.DropDownListFor(x => x.HospitalID, Model.Hospital)
        @Html.DropDownListFor(x => x.WardID, Model.Wards)
        <input type="submit" value="send" />
}    
</div>

Ваша ViewModel testContigency.Models.ListByWardDD должна иметь как минимум следующееproperties

public class ListByWardDD {
    public int HostpitalID { get;set; }
    // the value of the SelectListItem-objects should be the hospital ID
    public IEnumerable<SelectListItem> Hospital { get;set; }

    public int WardID { get;set; }
    // the value of the SelectListItem-objects should be the ward ID
    public IEnumerable<SelectListItem> Wards { get;set; }
}

После того, как вы отправите форму (для простоты я добавил кнопку для отправки формы и оставил часть javascript вне поля) метод TestDropDowns вашего контроллера (который необходимо заполнить в BeginForm-Helper) будет называться.Этот метод ожидает, что объект типа ListByWardDD ожидает в качестве параметра, и среда автоматически заполнит значения для вас.

[HttpPost]
public ActionResult TestDropDowns(ListByWardDD viewModel) {
    // your code here, viewModel.HospitalID should contain the selected value
}

Примечание. После отправки формы свойства Hospital и Wards будут пустыми.,Если вам нужно снова отобразить форму, вам необходимо заново заполнить эти свойства.В противном случае ваши выпадающие списки пусты.

Я изо всех сил старался опубликовать действительный код, но не компилировал и не тестировал его.

...