将selectedItem传递给下一个控制器

时间:2018-12-06 11:36:59

标签: c# asp.net-mvc model-view-controller

我对剃刀页面/ 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>  

1 个答案:

答案 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。

只要您的接收方法设置了正确的值,您就应该能够在另一端接收到这些值。