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

时间:2016-10-17 09:38:34

标签: c# asp.net-mvc-4 razor http-get html.actionlink

我是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();
    }

现在我想将选定日期(DownloadOutwardFromDate)作为参数传递给ExportToExcelOutwardCompleted方法。但是每当我单击actionlink按钮时,FromDate参数为null或默认日期值,无法获取选定值。所以请任何一个给出解决方案

2 个答案:

答案 0 :(得分:-1)

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

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

答案 1 :(得分:-1)

要提交用户输入的值,您必须使用formform可以设置为POSTGET

示例

视图

@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方法中的参数相同的名称。这样,模型绑定可以正确关联请求中的数据。