2017-01-09 6 views
-1

Ich möchte auf eine andere Ansicht des gleichen Controllers von einer Funktion des Controllers umleiten.Rückkehr Ansicht funktioniert nicht richtig

Hier ist mein Code In Ansicht:

$.ajax({ 
    type: "POST", 
    url: '@Url.Action("CreateEBulletinPdf","EBulletin")', 
    contentType: "application/json", 
    dataType: "JSON", 
    data: JSON.stringify({ "productIdList": selectedProductIdList }), 
    success: function (result) { 

    } 
}); 

In Controller:

public void CreateEBulletinPdf(string productIdList) 
{    
    productIdList = productIdList.Substring(0, productIdList.Length - 1); 

    var productIdStrings = productIdList.Split(','); 

    detailViewModels = productIdStrings.Select(productIdString => PdfProduct(Convert.ToInt32(productIdString))).ToList(); 

    ProductsEBulletin();        
} 

public ActionResult ProductsEBulletin() 
{ 
    try 
    { 
     return View(detailViewModels); 
    } 
    catch (Exception) 
    { 
     throw; 
    } 
} 

Nachdem alle meine Funktionen ausführen, meine Zielansicht, die Namen ProductsEBulletin nicht gezeigt. Wo ist mein Fehler?

+1

Haben Sie einen Breakpoint gesetzt, Ihren Code debugged und überprüft, dass er aufgerufen wird und funktioniert? – Marco

+2

Ihre HTTP-Anfrage wird von 'CreateEBulletinPdf()' gesendet, die nichts zurückgibt ('void'). Intern ruft es 'ProductsEBulletin()' (das 'ActionResult' zurückgibt) auf, aber' CreateEBulletinPdf' tut nichts damit. – haim770

+0

@Marco, ja, ich debugged meinen Code alles ist in Ordnung .. – cagin

Antwort

3

Erstens, wenn Sie einen ajax Anruf mit Inhaltstyp contentType: "JSON", keine Notwendigkeit, das Datenobjekt wie Sie hier tun data: JSON.stringify({ "productIdList": selectedProductIdList }),. Und da Sie erwarten HTML als Rückkehr bekommen Sie die dataType: 'html'

Zweite angeben müssen, Ihre CreateEBulletinPdf Methode Rückkehr wird nicht Wert so mit return ProductsEBulletin(); die letzte Anweisung ersetzen.

Last, die Art und Weise Ihr die Aktion von der Ajax-Aufruf wird nicht wie erwartet funktioniert, müssen Sie eine Aktion Ergebnis JsonResult statt ActionResult reinen HTML zurückzukehren, und es dann auf Ihre HTML in der success Funktion des Einsatzes ajax, wie folgt aus:

Aktionscode:

public JsonResult ProductsEBulletin() 
{ 
    try 
    { 
     var data = RenderRazorViewToString("ProductsEBulletin", detailViewModels) 
     return Json(data, JsonRequestBehavior.AllowGet); 
    } 
    catch (Exception) 
    { 
     throw; 
    } 
} 

public string RenderRazorViewToString(string viewName, object model) 
{ 
    ViewData.Model = model; 
    using (var sw = new StringWriter()) 
    { 
    var viewResult = ViewEngines.Engines.FindPartialView(ControllerContext, 
                  viewName); 
    var viewContext = new ViewContext(ControllerContext, viewResult.View, 
           ViewData, TempData, sw); 
    viewResult.View.Render(viewContext, sw); 
    viewResult.ViewEngine.ReleaseView(ControllerContext, viewResult.View); 
    return sw.GetStringBuilder().ToString(); 
    } 
} 

Javascript-Code:

$.ajax({ 
    type: "POST", 
    url: '@Url.Action("CreateEBulletinPdf","EBulletin")', 
    contentType: "application/json", // type of data sent to server 
    dataType: "html", // type of data received from server 
    data: { "productIdList": selectedProductIdList }, 
    success: function (result) { 
      $('#selector-of-tag-to-be-filled').html(result); 
    } 
}); 
+0

Ihre Antwort ist umfassender – BWA

+0

Dank Ihrer Antwort.Ich habe meinen Code entsprechend Ihren Anregungen geändert.Im Moment ist mein Beitrag funktioniert nicht – cagin

+0

Was meinst du mit nicht arbeiten? Irgendwelche Fehler? Irgendwelche Details? Bitte stellen Sie etwas Nützliches, damit ich Ihnen helfen kann :) –