2016-07-07 8 views
0

私よりも知的な人からの提案が必要です。私は基本的に、3つのラジオボタン(電子メール、PDF、なし)とはいといいえ送信ボタンの2つのものを持っているモーダルを持っています。 ラジオボタンを押すと、ユーザーがコントローラ内で電子メールまたはpdfを押したかどうかを知るために隠れ変数を適切にフラグを立てます。ユーザーが保存するために「はい」を押すと(ハッピー・パス)、コントローラーが呼び出されます。 このコントローラーは変更を保存し、別のページにリダイレクトします。今私はこのコントローラに追加し、pdfをダウンロードさせたいと思う。私は私のDownloadPDFアクションを呼び出すことでこれをやっています。ラジオボタンをクリックしてリダイレクトしてPDFをダウンロードしてください

public ActionResult Main(string id) 
//code for doing all the save and other stuff 
{ 
if (viewModel.Email) 
{ 
    SendTestingEmail(viewModel.ConsumerEncryptedID); 
} 
else if(viewModel.PDF) 
{ 
    DownloadWelcomePDF() 
} 
return RedirectToAction("ConsumerIndex", "Consumer") 

}

public ActionResult DownloadWelcomePDF(string id) 
{ 
    var htmlWelcomeEmail = db.getHtmlBody(id.DecryptID()); 
    var converter = new ConvertToPDF(); 
    var file = converter.ConvertHTMLStringToPDF(htmlWelcomeEmail.EmailBody); 
    var fileStreamResult = new FileStreamResult(file, "application/pdf") { FileDownloadName = string.Format("Welcome{0}{1}_{2}.pdf", htmlWelcomeEmail.ConsumerFirstName, htmlWelcomeEmail.ConsumerLastName, DateTime.Now.ToString("yyyyMMdd")) }; 
    return fileStreamResult; 
} 

これも私が、同時にこれらの2つのこと(別のページにリダイレクトし、ダウンロードする)の両方を行うことができないPDFコンテンツを返しますので、。 私は長い間インターネットを検索してきました。 これは本質的にダウンロードとリダイレクトですが、ダウンロードは特定の条件(ラジオのプレス)でのみ行われる必要があり、ページは常にリダイレクトされます。

答えて

0

これを2つのステップに分けることができます。

最初に送信する際に、javascriptのチェックを入れて、PDFをダウンロードするかどうかを確認します。彼が望むなら、ダウンロードアクションを呼び出して、JSからmainメソッドを呼び出します。

最初にcustomerIndexページをレンダリングし、フラグ(downloadPDFForIdなど)を渡すことができます。 CustomerIndexのJSのこのフラグに基づいて、ファイルをダウンロードできます。

最初の方法は、よりクリーンな方法です。

関連する問題