我对剃刀页面/ 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()}
};
}
此问题:从DropDownList选择新项目时,SelectedState没有更新。并且请求将始终像这样: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>
答案 0 :(得分:0)
请记住,您可能需要更改一些内容,但是总体思路是这样
如果最后有一个按钮可以执行整个 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,对于帖子,您将需要创建一个form元素,并且在ASP.NET中发布帖子通常应该更容易,因为您需要考虑默认的modelbinder。
只要您的接收方法设置了正确的值,您就应该能够在另一端接收到这些值。