2015-06-23 19 views
0

我想調用控制器中的操作方法。但actonmethod沒有看法。如何調用沒有視圖的操作方法

我有這樣的:

<div class="col-lg-6 col-md-8 col-sm-10 ">  
     <a href="@Url.Action("GeneratePDFFFromHtml", "Product")" class="btn btn-primary enabled"><i class="fa fa-fw fa-check"></i> @Resources.Action.Navigation.GeneratePDF </a>  
    </div> 

,這是我的操作方法:

[HttpPost]  
public ActionResult GeneratePDFFFromHtml(EditProductModel model, string data) 
{   
    SubmittedForm sf = new SubmittedForm(); 
    string schema = requestSchema; 
    customer_DbConnection db = new customer_DbConnection(); 
    RenderFormController renderController = new RenderFormController(); 
    renderController.GeneratePdf(data, db,sf); 
    //return RedirectToAction(model.DesignId, "Prdocut/Edit"); 
    return Content("It works");   
} 
+0

考慮將其命名爲'GeneratePdfFromHtml'。 –

+0

你試過了無效嗎? – alisabzevari

+0

'「但行動方法沒有看法」' - 那麼它有什麼*?行動的結果應該是什麼? – David

回答

1

如果你想做一些基於按鈕/鏈接的工作,爲什麼不直接使用ajax調用呢?

例如:

<div class="col-lg-6 col-md-8 col-sm-10 ">  
    <button onclick=GeneratePdf('@Model.DesignId', <string data>) class="btn btn-primary enabled"><i class="fa fa-fw fa-check"></i> @Resources.Action.Navigation.GeneratePDF </button>  
</div> 

而在你的.cshtml,我建議有在文件底部的腳本部分:

@section Scripts{ 
    <script type="text/javascript"> 
     //modify as needed to make it pass in what you need. 
     function GeneratePdf(designId, stringData) { 
      $.ajax({ 
      url: "@Url.Action("GeneratePDFFFromHtml","Product")", 
      data: { designId: designId, strData: stringData }, 
      cache: false, 
      contentType: false, 
      processData: false, 
      type: "POST", 
      success: function (data) { 
       //TODO: Add whatever if you want to pass a notification back 
      }, 
      error: function(error) { 
       //TODO: Add some code here for error handling or notifications 
      } 
     } 
    </script> 
} 

然後,在你的控制器,你可以有你的函數返回void。注意:我不確定是否需要傳入DesignId,但是您已將它放在那裏,因此我會將其保留在那裏。您可能需要更多地編輯此方法以使其正常工作,但希望這會讓您順利進行。

[HttpPost]  
public void GeneratePDFFFromHtml(string designId, string strData) 
{   
    SubmittedForm sf = new SubmittedForm(); 
    string schema = requestSchema; 
    customer_DbConnection db = new customer_DbConnection(); 
    RenderFormController renderController = new RenderFormController(); 
    renderController.GeneratePdf(strData, db, sf); 
    //return RedirectToAction(model.DesignId, "Prdocut/Edit");  
} 

此外,這將是異步的,所以你可能想要通知用戶某些操作正在像微調框一樣完成。

+0

謝謝Jason! – InfinityGoesAround

0

與System.Web.Mvc.EmptyResult嘗試或重定向到同一頁面 System.Web.Mvc .RedirectResult。

0

更簡單的方法是使用您的控制器的路由,路由屬性如下。

在您的控制器中,簡單地決定所需的路線並添加它。我用ImportExport

[Area("Exporting")] 
[Route("api/ImportExport")] 
public class ImportExportController : Controller 
{ 
    ............ 

    [Route("GeneratePDF")] 
     [HttpPost]  
      public void GeneratePDFFFromHtml(string designId, string strData) 
      {   
       SubmittedForm sf = new SubmittedForm(); 
       string schema = requestSchema; 
       customer_DbConnection db = new customer_DbConnection(); 
       RenderFormController renderController = new RenderFormController(); 
       renderController.GeneratePdf(strData, db, sf); 
       //return RedirectToAction(model.DesignId, "Prdocut/Edit");  
      } 

    ....... 

而在你的頁面CSHTML只需撥打該路徑如下

<form enctype="multipart/form-data" method="post" action="~/api/ImportExport/GeneratePDF" id="frmGenerate" novalidate="novalidate" class="form-horizontal"> 
.....