Передать selectedItem следующему контроллеру - PullRequest
0 голосов
/ 06 декабря 2018

Я немного новичок с бритвенными страницами / MVC.У меня есть ProjectController, который использует ViewBag.В представлении я могу отобразить этот список EnumList.Я хочу передать следующему контроллеру Model.ProjectId и SelectedItem.

Я пытался что-то вроде этого:

<div class="form-group">
    @{ 
        var parms = new Dictionary<string, string>
        {
            {"ProjectId", Model.Id.ToString() },
            {"Event", ((int)ViewBag.SelectedState).ToString()}
        };
    }

Проблема с этим: SelectedState не обновляется, когда я выбираю новый элемент из DropDownList.И запрос всегда будет таким: https://localhost:port/Event/Create?ProjectId=1&Event=1

Мой контроллер:

private void CreateViewBagsDetail(string mode, string title)
    {
        ViewBag.Mode = mode;
        ViewBag.ModeTitle = title;
        var projectStateList = GetState<Datas.Enums.ProjectStateEnum>();
        ViewBag.ProjectStateList = projectStateList;
        ViewBag.SelectedState = projectStateList.SelectedValue;
    }

public SelectList GetState<T>()
    {
        List<string> events = new List<string>();
        var enumNames = (string[])Enum.GetNames(typeof(T));

        for (int i = 1; i < enumNames.Length; i++)
        {
            T enumElement = (T)Enum.Parse(typeof(T), enumNames[i]);
            events.Add((enumElement as Enum).GetDescription());
        }

        SelectList eventList = new SelectList(events);

        return eventList;
    }

Мой просмотр:

@model Datas.Entities.Project
<h2>@ViewData["Title"]</h2>
<div class="row top-card">
    <div class="col-md-2 card">
        <div asp-validation-summary="All" class="text-danger"></div>
        <div class="form-group">
            <label>Események</label>
            <select asp-for="State" class="form-control" asp-items="@(SelectList)ViewBag.ProjectStateList"></select>
        </div>
             <a class="btn bg-teal btn-block waves-effect" asp-controller="Event" asp-action="Create" asp-all-route-data="parms">Felvitel</a>
        </div>
    </div>
</div>  

1 Ответ

0 голосов
/ 06 декабря 2018

Имейте в виду, что вам может потребоваться изменить несколько вещей, но общая идея такова:

Если в конце у вас есть кнопка, которая выполняет весь запрос GET , выможно выразиться так

$("#some_button").click(function() {
      var url = '@Url.Action("Create","Event")?projectid=' + @ {
        Model.Id.ToString()
      } + '&/event=' + $("#select_id option:selected").value;
      window.location = url;
    }

Теперь, если вы ищете запрос POST , все становится немного иначе, как вы задали свой вопрос, то же самое, что GETДля публикации, в которой вы отправляете параметры в виде строки запроса на URL-адрес, для публикации вам потребуется создать элемент формы, и, как правило, сделать публикацию в aspnet проще, поскольку вам нужно будет использовать связующее для моделей по умолчанию.

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

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