Die übergabe von Eingabeparametern controller-Methode über Html.ActionLink
Wenn der Benutzer klickt auf ein Html.ActionLink
, muss ich anrufen einer controller-Methode, die den download einer csv
Bericht für den Benutzer. Ich brauche auch diesen controller die Werte von zwei Eingabe-Felder, der um eine start-und end-date-Reihe, die Sie suchen.
Derzeit kann ich zuweisen das Html.ActionLink
Parameter mit jQuery, allerdings sind Sie nicht so dass es zurück an den controller. Beide Parameter in der controller-Methode instanziiert, mit null
Werte.
Ich auch nicht mit einer form/submit-Methode, die als, der bereits verwendet wird, die auf diese Besondere form, damit die Benutzer die Daten sehen, die in den Datumsbereich der Antrag vor dem Export in eine csv.
jQuery
$(document).ready(function() {
$('#startDate').change(function () {
$('a').attr('start', $(this).val());
});
$('#endDate').change(function () {
$('a').attr('end', $(this).val());
});
});
ASP MVC 3 Anzeigen
@using (Html.BeginForm())
{
<div id="searchBox">
@Html.TextBox("startDate", ViewBag.StartDate as string, new { placeholder = " Start Date" })
@Html.TextBox("endDate", ViewBag.EndDate as string, new { placeholder = " End Date" })
<input type="image" src="@Url.Content("~/Content/Images/Search.bmp")" alt="Search" id="seachImage"/>
<a href="#" style="padding-left: 30px;"></a>
</div>
<br />
@Html.ActionLink("Export to Spreadsheet", "ExportToCsv", new { start = "" , end = ""} )
<span class="error">
@ViewBag.ErrorMessage
</span>
}
Controller-Methode
public void ExportToCsv(string start, string end)
{
var grid = new System.Web.UI.WebControls.GridView();
var banks = (from b in db.AgentTransmission
where b.RecordStatus.Equals("C") &&
b.WelcomeLetter
select b)
.AsEnumerable()
.Select(x => new
{
LastName = x.LastName,
FirstName = x.FirstName,
MiddleInitial = x.MiddleInitial,
EffectiveDate = x.EffectiveDate,
Status = x.displayStatus,
Email = x.Email,
Address1 = x.LocationStreet1,
Address2 = x.LocationStreet2,
City = x.LocationCity,
State = x.LocationState,
Zip = "'" + x.LocationZip,
CreatedOn = x.CreatedDate
});
grid.DataSource = banks.ToList();
grid.DataBind();
string style = @"<style> .textmode { mso-number-format:\@; } </style> ";
Response.ClearContent();
Response.AddHeader("content-disposition", "attachment; filename=WelcomeLetterOutput.xls");
Response.ContentType = "application/excel";
StringWriter sw = new StringWriter();
HtmlTextWriter htw = new HtmlTextWriter(sw);
grid.RenderControl(htw);
Response.Write(style);
Response.Write(sw.ToString());
Response.End();
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich glaube das problem ist, dass der link nicht haben ein 'start' oder 'Ende' - Attribut. So
$('a').attr('start', $(this).val());
wird nichts.'@Url.Action("ExportToCsv", "Agent")'
Sie zum abrufen der URL, aber das war genau das, was ich suchte. Danke!!!Naja, eigentlich können Sie 2 submit-buttons innerhalb Ihrer form und in Ihrem POST-controller Aktion wissen, auf welche Schaltfläche geklickt wurde, um entsprechend zu handeln. Einfach so:
Nun Ihre controller-Aktion könnte ein
btn
argument:Wie Sie sehen können, in beiden Fällen wird das Formular gesendet, um den gleichen controller handeln, in dem Sie offensichtlich bekommen Sie Ihre Ansicht Modell von der form-Daten und zusätzlich zu, dass Sie wissen, auf welche Schaltfläche geklickt wurde, um geeignete Maßnahmen zu ergreifen. So, jetzt yo ucan, loszuwerden, alle die fancy javascript und Anker könnte Sie geschrieben haben. Ihre Anwendung funktioniert sogar, wenn der Benutzer javascript deaktiviert. Es ist schlichtes, einfaches HTML.
HINWEIS: Bedenken Sie, dass das, was Sie gezeigt haben und rief controller-Methode in Ihrer Frage ist nicht etwas, was standard in ASP.NET MVC. In ASP.NET MVC diese Methoden haben Namen. Tjeir sind aufgerufen, controller-Aktionen und muss zurück
ActionResults
und nicht nichtig. Auch Sie scheinen mitvar grid = new System.Web.UI.WebControls.GridView();
im ernst, in einer ASP.NET MVC-Anwendung dude?