首页 > 解决方案 > 如何使用相同的控制器但不同的操作将数据从一个视图传递到另一个视图?ASP.Net 和微软图形

问题描述

好的,所以想法是用户单击视图上的下拉选择,点击表单上的提交,将用户选择发送回控制器,并呈现特定于该用户选择的新视图。

这是视图:

<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 方法将获取 user 选项的值并将其传递给具有操作“Index”的控制器:

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

        return View("Channels", data);

    }

现在它使用下面的 html 渲染了一个“Channels”视图:

<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 创建一个选项卡。我会将这个带有“channelId”值的“channelList”表单提交回我的控制器。

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 有关,但我已经阅读了该文档并且无法理解它。我能得到一些帮助吗?谢谢!

标签: c#asp.net-mvcmicrosoft-graph-api

解决方案


快速解决方案是仅在表单元素上使用 Url 助手:

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

你也可以Html.BeginForm用来渲染整个表单:

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

在这两种情况下,您SubmitChannelId在 Controller 中的操作都应使用[HttpPost]提交的输入参数进行修饰并接受channelId(相应地更改参数类型):

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

推荐阅读