我想在控制器中调用一个动作方法。但是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 :(得分: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");
}
此外,这将是异步的,因此您可能需要向用户发出一些通知,表示某些操作正在像微调器那样完成。
答案 1 :(得分:0)
尝试使用System.Web.Mvc.EmptyResult或重定向到同一页面 System.Web.Mvc.RedirectResult。
答案 2 :(得分: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">
.....
答案 3 :(得分:0)
谢谢安迪·科尔涅耶夫!!!您的示例代码帮助我解决了我一整天都在努力解决的问题。在没有刷新/查看的情况下运行代码块功能后,我使用了您的代码(并稍微修改了它)返回。
return Content("<script type='text/javascript'>window.history.back();</script>");
我知道这真的很旧,但希望你能看到。