将selectedItem传递给下一个控制器



我对剃刀页面/MVC有点陌生。我有使用ViewBag的ProjectController。在视图中,我可以显示此EnumList。我想将Model.ProjectId和SelectedItem传递给下一个控制器。

我试过这样的东西:

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

问题是:当我从下拉列表中选择新项目时,SelectedState不会更新。请求将始终是这样的:https://localhost:port/Event/Create?ProjectId=1&事件=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>  

请记住,您可能需要更改一些内容,但总体思路是这个

如果您在末尾有一个按钮来完成整个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帖子相同,在GET帖子中,您将参数作为URL上的查询字符串发送,对于帖子,您需要创建一个表单元素,并且在aspnet中发布通常会更容易,因为您需要考虑默认的modelbinder。

只要您的接收方法设置了正确的值,您就应该能够接收另一侧的值。

最新更新