首页 > 解决方案 > MVVC - 使用 ViewBag 和控件传递参数的问题

问题描述

我已经被其他人完成了一个 MVVC 项目,但存在一些问题(该项目,而不是某人:D)。我以前对此一无所知,所以我搜索了教程和问题,但我无处可去。因此,如果有任何相关的帖子我没有找到,请随时将我重定向到那里。

控制器有一个方法,它返回一个 ReportClienti 类型的 IQueryable。这是签名

 public ActionResult ReportClienti(DateTime? date
                                , string sortOrder
                                , int? currentClienteID
                                , string currentDescrizione
                                , int? clienteIDsearch
                                , string descrizioneSearch
                                , int? page)

如果我理解正确,如果页面中有任何 id 与参数相同的控件,它们应该自动传递。

我认为这一行会在页面打开后立即加载列表:

 @Html.PagedListPager(Model, page => Url.Action("ReportClienti",
    new { @page, @sortOrder = @ViewBag.CurrentSort, @currentClienteID = ViewBag.CurrentClienteID, @currentDescrizione = ViewBag.CurrentDescrizione }))

显然,这个调用的所有参数都等于 null。

到目前为止,一切都很好。

页面的第一部分有以下代码:

@using (Html.BeginForm("ReportClienti", "LavoratoreRapportini", FormMethod.Get, new { @class = "form-inline" }))
        {
        <div class="form-group">

            <input type="button"
                   class="btn btn-info"
                   style="min-width:80px; padding:4px;"
                   value=@ViewBag.Data.AddMonths(-1).ToString("MMMM")
                   onclick="location.href='@Url.Action("ReportClienti", "LavoratoreRapportini", @ViewBag.Data.AddMonths(-1))'" />

               

基本上,它是一个按钮,用于在当前选择之前选择一个月并执行 ReportClienti 方法来加载列表。我假设@ViewBag.Data.AddMonths(-1) 自动作为第一个参数传递(调试我确认“日期”具有正确的值)。我试图将参数的名称从“date”更改为“testDate”,但在这种情况下,该方法将所有参数都接收为 null。这怎么可能?我不明白如何以这种方式绑定名称。

在较低的部分,我得到:

@using (Html.BeginForm("ReportClienti", "LavoratoreRapportini", FormMethod.Get, new { @class = "form-inline" })) {

    @Html.DropDownList("clienteIDsearch", (SelectList)ViewBag.FKclienteID, "", htmlAttributes: new { @class = "form-control" })

    @Html.TextBox("descrizioneSearch", @ViewBag.CurrentDescrizione as string, new { @class = "form-control frmFilter" })

        <button type="submit" 
                class="btn btn-primary"
                @*onclick="location.href='@Url.Action(" ReportClienti", "LavoratoreRapportini" , @ViewBag.Data)'"*@
                onclick="location.href='@Url.Action(" ReportClienti", "LavoratoreRapportini" )'">
            Search
        </button>
        

这总是传递参数 clienteIDSearch 和 descrizioneSearch 的值,但是我无法传递日期的值。基本上,它按日期或按下拉列表和文本框过滤,从不按两者过滤。我什至尝试将 viewbag 中的日期值设置为隐藏字段,但我仍然无法将值传递给日期(如果我添加一个新参数,将其设置为字符串,我可以传递它,但是作为日期时间?它始终为空)。

标签: c#parametersviewbagurl.action

解决方案


推荐阅读