MVC 4将ActionLink (type: HttpGet)的参数传递给Controller

本文关键字:参数传递 Controller HttpGet ActionLink type MVC | 更新日期: 2023-09-27 18:13:24

我是Asp.net MVC的新手,目前我想在用户单击动作链接按钮时将一些参数(选定日期)传递给控制器,下面是动作链接和日期选择器字段代码,

   <div class="panel panel-default">
    <div class="panel-heading">
        <h3 class="panel-title">
            Manage Outward - Completed</h3>
    </div>
    <div class="panel-body">
        @Html.CreateJQGrid(Model.GridCompletedOWData)
        <br />
        <div class="icon-list">
            @Html.ActionLink("Download Completed Transactions", "ExportToExcelOutwardCompleted", "InwardOutward", new { enctype = "multipart/form-data", model = @Model, FromDate = @Model.DownloadOutwardFromDate.ToString(), ToDate = Model.DownloadOutwardFromDate.ToString() }, new { @id = "DownloadAccount", @class = "linkTxt" })
        </div>
    </div>
       <div class="col-md-3">
                <label for="" class="control-label">
                    Download From Date
                </label>
                @Html.EditorFor(model => model.DownloadOutwardFromDate, new { @class = "form-control" }).DisableIf(() => Model.IsReadOnly == true)
                @Html.HiddenFor(model => model.DownloadOutwardFromDate)
        </div>
        <div class="col-md-3">
            <label for="" class="control-label">
                Download To Date
            </label>
            @Html.EditorFor(model => model.DownloadOutwardToDate, new { @class = "form-control" }).DisableIf(() => Model.IsReadOnly == true)
            @Html.HiddenFor(model => model.DownloadOutwardToDate)
        </div>
        <br />
</div>

我的控制器

  public ActionResult ExportToExcelOutwardCompleted(CompletedIWOWDetailsModel model, string FromDate, string ToDate)
    {
        var employeeBranch = employeeBranchService.FilterBy(x => x.Userseq == LoggedInUser.UserSeqeunce).Select(x => x.Branchseq).ToList();
        var userIds = employeeBranchService.FilterBy(x => employeeBranch.Contains(x.Branchseq)).Select(x => x.Userseq).ToList();
        List<TrnOutflowDetailsAud> trnInflowDetailsP = trnOutwardDetailsAudService.FilterBy(x =>
            (employeeBranch.Contains(x.InitiatedBranchSeq) && (x.OutflowStage == (int)enumOutflowStage.Completed) && x.Transactiondate >= DateTime.Now.AddDays(-30))).ToList();
        var clientDCAList = clientDcaService.All().Where(x => x.Active == "Y").ToList();
        var List = (from p in trnInflowDetailsP.ToList()
                    join C in GetCurrency() on p.Currencyoftheinstructedamount equals C.Id into CTClist
                    from C in CTClist.DefaultIfEmpty()
                    join CC in GetCurrency() on p.Currencyofthetransaction equals CC.Id into CTC
                    from CC in CTC.DefaultIfEmpty()
                    join PC in GetPurposeCode() on p.PurposeCodeSeq equals PC.Id into PurLIST
                    from PC in PurLIST.DefaultIfEmpty()
                    join CU in GetUserList() on p.CreateUser equals CU.Id into CUL
                    from CU in CUL.DefaultIfEmpty()
                    join AU in GetUserList() on p.AuthUser equals AU.Id into AUL
                    from AU in AUL.DefaultIfEmpty()
                    //join D in GetDepartmentList() on p.DepartmentSeq equals D.Id into DEPList
                    //from D in DEPList.DefaultIfEmpty()
                    join b in branchService.All().ToList() on p.BranchSeq equals b.Id into branch
                    from b in branch.DefaultIfEmpty()
                    join IB in branchService.All().ToList() on p.InitiatedBranchSeq equals IB.Id into IBList
                    from IB in IBList.DefaultIfEmpty()
                    //join CTC in clientDCAList on p.AccountNumber equals CTC.AccountNo into CTCList
                    //from CTC in CTCList.DefaultIfEmpty()
                    select new
                    {
                        p.TranRef,
                        TradeStatus = p.OutflowStage == 0 ? "" : ((enumOutflowStage)p.OutflowStage).GetDescriptionEnum(),
                        InitiatedBranchName = IB == null ? "" : IB.BranchName,
                        p.Draccountnumber,
                        BranchName = b == null ? "" : b.BranchName,
                        TransactionDate = p.Transactiondate.GetFormatDateWithOutTime(),
                        p.CustomerName,
                        p.Noofinstructions,
                        p.Amount,
                        CurrencyOfTheInstructedAmount = C == null ? "" : C.CurrencyCode,
                        CurrencyOfTheTransaction = CC == null ? "" : CC.CurrencyCode,
                        PurposeCode = PC == null ? "" : PC.PurCode,
                        ProductName = p.ProductName == 0 ? "" : ((enumOutflowProductNames)p.ProductName).GetDescriptionEnum(),
                        p.ProductNameOthers,
                        p.Anyotherspecificinstruction,
                        Modeoftransaction = p.Modeoftransaction == null ? "" : ((enumModeOfTransaction)p.Modeoftransaction).GetDescriptionEnum(),
                        SignatureVerification = p.SignatureVerification.GetYesNoString(),
                        Callback = p.Callback.GetYesNoString(),
                        p.IdmsRefNo,
                        //p.BatchNo,
                        p.Remarks,
                        Active = p.Active.GetYesNoString(),
                        //p.Status,
                        CreateUserName = CU == null ? "" : CU.UserName,
                        CreateDate = p.CreateDate.GetFormatDateWithOutTime(),
                        p.CreatorRemarks,
                        AuthUserName = AU == null ? "" : AU.UserName,
                        AuthDate = p.AuthDate.GetFormatDateWithOutTime(),
                        p.AuthRemarks
                    }).ToList();
        ExcelPackage excel = new ExcelPackage();
        var workSheet = excel.Workbook.Worksheets.Add("Sheet1");
        workSheet.Cells[1, 1].LoadFromCollection(List, true);
        using (var memoryStream = new MemoryStream())
        {
            Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
            Response.AddHeader("content-disposition", "attachment;  filename=" + Constants.Controller.InwardOutward + ".xlsx");
            excel.SaveAs(memoryStream);
            memoryStream.WriteTo(Response.OutputStream);
            Response.Flush();
            Response.End();
        }
        return View();
    }

现在我想把选择的日期(downloadoutardfromdate)作为参数传递给exporttoexceloutardcompleted方法。但是每当我点击actionlink按钮,FromDate参数是空或默认日期值,不能得到选择的值。请大家给出解决方案

MVC 4将ActionLink (type: HttpGet)的参数传递给Controller

将模型直接传递给动作。在代码后面的操作中,直接读取这些字段。

修改动作的签名,使其可以作为模型的参数

要提交用户输入的值,必须使用form。"form"可设置为"POST"或"GET"。

视图
@using (@Html.BeginForm("ExportToExcelOutwardCompleted", "InwardOutward", FormMethod.Get))
{
    @Html.TextBox("dateFrom")
    @Html.TextBox("dateTo")
    <button type="submit">Submit</button>
}

控制器动作

public ActionResult ExportToExcelOutwardCompleted(string dateFrom, string dateTo)
{
    // Your code here
    return View();
}

文本框的id与action方法中的参数同名。这样,模型绑定就可以正确地关联请求中的数据。