Как вы передаете данные из одного представления в другое, используя один и тот же контроллер, но разные действия? ASP. Net & Microsoft Graph - PullRequest
1 голос
/ 17 марта 2020

Хорошо, идея в том, что пользователь щелкает раскрывающийся список в представлении, нажимает кнопку Отправить в форме, которая отправляет выбор пользователя обратно в контроллер, и отображает новое представление, указывающее c этому выбору пользователя. .

Это представление:

<form method="post">
    <label for="teamList">First choose a team:</label>
    <select id="teamList" name="ID">
        @foreach (var item in Model)
        {
            <option value=@item.Id>@item.DisplayName</option>
        }
    </select><br />
    <input type="submit" value="Get channels">
</form>

Метод post в форме будет принимать значение пользовательской опции и передавать его в контроллер с действием 'Index':

[HttpPost]
    public async Task<ActionResult> Index(string ID)
    {
        var data = await GraphHelper.GetChannelsAsync(ID);

        return View("Channels", data);

    }

Теперь он отображает представление «Каналы», показанное ниже html:

<form method="post">
    <label for="channelList">Now choose a channel:</label>
    <select id="channelList" name="channelId">
        @foreach (var item in Model)
        {
            <option value=@item.Id>@item.DisplayName</option>
        }
    </select><br />
    <input type="submit" value="Create tabs">
</form>

Теперь мне нужна помощь. Мне нужно снова отправить эту форму channelList, чтобы создать вкладку с помощью Microsoft Graph API. Я бы отправил эту форму «channelList» обратно в мой контроллер со значением «channelId».

public async Task<ActionResult> SubmitChannelId()
        {
            //Take channelID and pass it to microsoft.graphApi function call here
            return View(//with returned function call response);
        }

Как я могу сделать [HttpPost] запрос на отправку в этом представлении «Каналы», если я использую тот же контроллер? Вероятно, это как-то связано с действиями или actionLinks, но я прочитал эту документацию и не смог понять этого. Могу ли я получить помощь? Спасибо!

1 Ответ

0 голосов
/ 17 марта 2020

Быстрое решение состоит в том, чтобы просто использовать помощника Url для элемента формы:

<form method="post" action="@Url.Action("MyAction", "MyController")" >

Вы также можете использовать Html.BeginForm для отображения всей формы:

@using(Html.BeginForm("MyAction", "MyController", FormMethod.Post))
{
    < ... >
}

В обоих В случае, если ваше действие SubmitChannelId в Контроллере должно быть украшено [HttpPost] и принимать входной параметр submited channelId (соответственно изменить тип параметра):

[HttpPost]
public async Task<ActionResult> SubmitChannelId(int channelId)
{
    < ... >
}
...