#c# #asp.net-mvc-4 #razor #http-get #html.actionlink
#c# #asp.net-mvc-4 #бритва #http-get #html.ссылка на действие
Вопрос:
Я новичок в 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) amp;amp; (x.OutflowStage == (int)enumOutflowStage.Completed) amp;amp; 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 или значение даты по умолчанию, не может получить выбранное значение.Поэтому, пожалуйста, кто-нибудь даст решение
Комментарии:
1. Этот параметр передавать не нужно, вы передаете модель, а затем две переменные из нее после этого, почему бы просто не передать модель и не извлечь эти переменные в вашем контроллере?
2. Я не знаю, как передать model в качестве параметра, потому что, если я хочу передать model, я должен использовать тип HttpPost правильно? А также мы не можем сделать это с помощью ActionLink, верно?. Для публикации модели используется BeginForm, поэтому я хочу использовать ActionLink. Если вы знаете, как передать модель в качестве параметра для ActionLink, пожалуйста, помогите мне с некоторым кодом.
3. Я имею в виду, что в вашей actionlink есть
model = @Model
objectVariables, поэтому вы уже передаете модель в качестве параметра. После этого у вас естьFromDate = @Model.DownloadOutwardFromDate.ToString()
. В этом случае у вас может быть код в вашем контроллере, который получает его из модели, которую вы используете4. @MdAslam вы уже передаете модель в качестве параметра в своей ActionLink, так что, возможно, вы знаете, как это сделать! Вам не нужно использовать POST для передачи всего объекта, просто существует ограничение на размер строки запроса, и вы рискуете превысить это ограничение, отправив большой объект. В любом случае, в этом случае, поскольку отправляемый вами FromDate уже является свойством модели (которую вы также отправляете), то отправка его как другого отдельного параметра представляется избыточной.
5. Да, я пытался таким образом получить значение даты, но я не могу получить значение. model = @Model и FromDate = @Model. DownloadOutwardFromDate. toString() оба имеют только значение null, поэтому, пожалуйста, помогите мне
Ответ №1:
Передайте модель непосредственно действию. В действии в коде прочитайте эти поля напрямую.
Измените подпись действия, чтобы оно могло принимать в качестве параметра модель.
Комментарии:
1. @MdAslam Существует множество примеров. Вы всегда отмечаете отрицательно всех, кто не пишет код у вас дома?
Ответ №2:
Для отправки значений, введенных пользователем, вы должны использовать form
. Для A 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();
}
Текстовые поля имеют идентификатор, присвоенный тому же имени, что и параметр в методе действия. Это делается для того, чтобы привязка модели могла правильно связать данные в запросе.