Neues Fenster öffnet sich auf Klick auf actionLink
Habe ich eine Anforderung zum aufrufen einer controller-Methode aus der Sicht der Seite. Klicken Sie auf den link unter dem die Methode aufgerufen werden soll.
@Html.ActionLink(item.InvoiceNumber, "SendPdfStatement", "Invoice",
new { item.InvoiceNumber }, new { target = "_blank" })
die Signatur der Methode ist:
public void SendPdfStatement(string InvoiceNumber)
{
InvoiceNumber = InvoiceNumber.Trim();
ObjectParameter[] parameters = new ObjectParameter[1];
parameters[0] = new ObjectParameter("InvoiceNumber", InvoiceNumber);
List<Models.Statement> list = new List<Models.Statement>();
list = _db.ExecuteFunction<Models.Statement>("uspInvoiceStatement", parameters).ToList<Models.Statement>();
var statementResult = _db.ExecuteFunction<Models.Statement>("uspInvoiceStatement", parameters);
Models.Statement statement = statementResult.SingleOrDefault();
pdfStatementController.WriteInTemplate(statement);
}
nun das problem ist wenn ich auf den link klicke, wird ein leeres Fenster geöffnet. Ich weiß, es ist etwas mit new { target = "_blank" }
. Wenn ich den pass null
an seiner Stelle meine Seite mit link leer wird. Was soll ich hier also meine Seite bleibt, wie es ist und keine neuen leeren Fenster auch angezeigt wird.
Das problem ist in einer controller-Methode, die nicht in dieser html-helper-Aufruf. Es scheint, dass Ihre Methode ist die Rückkehr ein leeres Ergebnis. Sollten Sie zeigen uns den fehlenden code. Durch die Art und Weise, Ihre Methode aufgerufen werden soll
die Methode wird aufgerufen, SendPdfStatement nur in InvoiceController. Die detail-code für eine Methode
SendPdfStatement
in einem InvoiceController
Klasse. Sind Sie sicher, dass Sie überprüfen die richtige?die Methode wird aufgerufen, SendPdfStatement nur in InvoiceController. Die detail-code für eine Methode
InformationsquelleAutor 14578446 | 2011-12-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ändern Sie Ihre controller-Aktion. Die Seite, die Sie bekommen, ist leer, weil Sie nicht wieder alles. Tun
BEARBEITEN:
Oder Sie verwenden sollten, AJAX, sodass die Seite nicht neu geladen, und Sie nicht haben, um etwas zurückzugeben von der Methode. Lesen Sie hier http://www.asp.net/mvc/overview/older-versions-1/contact-manager/iteration-7-add-ajax-functionality-cs.
Sie tun. Sind Sie wieder eine Ansicht so, dass etwas auf der Seite angezeigt werden. Sie tun kann
return View('pathhere');
meine ursprüngliche Sicht erfordert ein Modell als input die nicht verfügbar sein hier drinnen "SendPdfStatement"
siehe mein edit. Sie müssen die AJAX verwenden, so dass Sie nicht die Seite neu laden. Dann ist dein link wird über die jquery-Funktion aufrufen
'onclick="savePdf();"'
die rufen dann dieHttpPost
controller-actionInformationsquelleAutor bobek
Versuchen, Diese
InformationsquelleAutor sohaib
Dies funktioniert für MVC5 sowie
InformationsquelleAutor Mohit P Mathew
Zunächst
Wird verwendet, um zu öffnen hyperreferenced Ressource in einem neuen browser-Fenster, so dass, wenn Sie nicht möchten, dass das neue Fenster - warum würden Sie das ? 🙂
Zweiten, Blick auf die ActionLink-Helfer-Methode (Beschreibung, die ich nahm aus der Frage verwiesen Balg):
werfen Sie einen Blick auf HTML-Code.ActionLink-Methode
Ich nehme an, Sie schlagen die falsche Methode überladen, wenn Sie Fehler erhalten. Wenn Sie ersetzen htmlArguments mit null, Sie sollten gut zu gehen, aber als Ihre Methode gibt VOID (nichts) bekommen Sie eine leere Seite (was würden Sie sonst noch erwarten 🙂 ? )
Abbrechen der Standard-navigation-Mechanismus implementieren Sie einfache jquery-Regel :
Sie können javascript verwenden (habe ich aktualisiert meine Antwort) aber es würde gut sein zu lassen Benutzer wissen, ob seine Aktion erfolgreich war oder nicht
InformationsquelleAutor torm
Also im Grunde, dass der Letzte parameter ist Ihr html-Attribute, wenn Sie nicht brauchen, es zu öffnen in einem neuen Fenster...das ist das einzige Attribut in es so übergeben Sie einen null-Wert für den gesamten parameter.
InformationsquelleAutor Tutan Ramen
versuchen vorbei
_self
statt_blank
oder alternativ übergabenull
statt ,new { target = "_blank" }
d.h.
@Html.ActionLink(item.InvoiceNumber, "SendPdfStatement", "Invoice", new { item.InvoiceNumber }, null )
oder lassen Sie die
new { target = "_blank" }
alle zusammenInformationsquelleAutor Brian