如何使用相同的控制器但不同的操作将数据从一个视图传递到另一个视图?ASP.Net & Microsoft Graph



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

这是观点:

<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方法将获取用户选项的值,并将其传递给具有操作"索引"的控制器:

[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有关,但我读过该文档,无法理解。我能得到一些帮助吗?谢谢

快速解决方案是只在表单元素上使用Url帮助程序:

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

您还可以使用Html.BeginForm来呈现整个表单:

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

在这两种情况下,控制器中的动作SubmitChannelId都应该用[HttpPost]装饰,并接受提交的channelId的输入参数(相应地更改参数类型(:

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

最新更新