سلام من یه فرم به صورت زیر دارم فرمم ایجکسی هست
فرمم ایجکسی هست
@using (Ajax.BeginForm("Income", "Building", new { entity =Model}, new AjaxOptions { UpdateTargetId = "result", HttpMethod = "POST", OnSuccess = "success" })) {
طولانیه همه کدها رو نزاشتم
ببینید وقتی دکمه گزارش رو میزنم با جاوا میگم برو توو یه اکشن که همون گزارشه منه و یه پارشیال برگردونه که همان گزارش استیمولم هست
این کد دکمه
$("#btnReport").click(function () { var lst = $("#gridd").data("kendoGrid").dataSource.data(); var start = $("#StartDate").val(); var end = $("#EndDate").val(); $.ajax({ type: "POST", url: '@Url.Action("IncomeReport", "Building")', data: JSON.stringify({ lst: lst,start:start,end:end }), contentType: "application/json; charset=utf-8", success: function () { alert('hello'); } }); });
اینم کدهای اکشنم
public ActionResult IncomeReport(List<BuildingIncome> lst, Nullable<DateTime> start, Nullable<DateTime> end) { TempData["listReportIncome"] = lst; TempData["start"] = start; TempData["end"] = end; return View(); } public ActionResult LoadReportIncome() { Nullable<DateTime> start = null; Nullable<DateTime> end = null; List<BuildingIncome> listReport = new List<BuildingIncome>(); if (TempData.Count > 0 && TempData["start"] != null) start = (DateTime)TempData["start"]; if (TempData.Count > 0 && TempData["end"] != null) end = (DateTime)TempData["end"]; if (TempData.Count > 0 && TempData["listReportIncome"] != null) listReport = (List<BuildingIncome>)TempData["listReportIncome"]; List<HeaderReport> lstHeader = new List<HeaderReport>(); lstHeader.Add(new HeaderReport() { StartDate = start , EndDate = end }); StiReport report = new StiReport(); string Path = Server.MapPath("~/Report/ReportIncome2.mrt"); report.Load(Path); report.RegBusinessObject("IncomeReport", listReport); report.RegBusinessObject("Header", lstHeader); report.Dictionary.SynchronizeBusinessObjects(2); return StiMvcViewer.GetReportSnapshotResult(HttpContext, report); }
وارد اکشن اول میشه اما متاسفانه اصلا وارد اکشن
LoadReportIncome نمیشه
اینم پارشیال ویو گزارش
@using System.Web.UI.WebControls; @using Stimulsoft.Report.Mvc; <div> @Html.Stimulsoft().RenderMvcViewerScripts() @Html.Stimulsoft().StiMvcViewer("MyViewr", new StiMvcViewerOptions() { ActionGetReportSnapshot = "LoadReportIncome", ActionViewerEvent = "ViewerEvent", Theme = StiTheme.Windows7, ActionPrintReport = "PrintReport", ActionExportReport = "ExportReport", ToolbarBackgroundColor = System.Drawing.Color.Silver }) </div>
آقای مدائنی چیکار کنم؟ یعنی گزارش باید توو یه ویو جدا باشه و توو پارشیال نمیشه؟ پس توو فرم ایجکس مثا الان چیکار باید کرد؟
بالای اکشن صفت HttpPost بزارید
آقای مدائنی httppost هم گذاشتم نشد
میشه یه کم با دقت تر ببینید (شما حرفه ای هستید)
ببینید یه فرم ایجکسی دارم ایناش
@using (Ajax.BeginForm("Income", "Building", new { entity =Model}, new AjaxOptions { UpdateTargetId = "result", HttpMethod = "POST", OnSuccess = "success" })) {
توو دکمه گزارش میگم ایجکسی بره توو یه اکشن
$("#btnReport").click(function () { var lst = $("#gridd").data("kendoGrid").dataSource.data(); var start = $("#StartDate").val(); var end = $("#EndDate").val(); $.ajax({ type: "POST", url: '@Url.Action("IncomeReport", "Building")', data: JSON.stringify({ lst: lst,start:start,end:end }), contentType: "application/json; charset=utf-8", success: function (result) { $("#result").html(result); } }); });
اینم کد گزارشم ببینید وقتی دکمه گزارش رو میزنه میاد توو IncomeReport
public ActionResult IncomeReport(List<BuildingIncome> lst, Nullable<DateTime> start, Nullable<DateTime> end) { TempData["listReportIncome"] = lst; TempData["start"] = start; TempData["end"] = end; return PartialView("_IncomeReport"); } [HttpPost] public ActionResult LoadReportIncome() { Nullable<DateTime> start = null; Nullable<DateTime> end = null; List<BuildingIncome> listReport = new List<BuildingIncome>(); if (TempData.Count > 0 && TempData["start"] != null) start = (DateTime)TempData["start"]; if (TempData.Count > 0 && TempData["end"] != null) end = (DateTime)TempData["end"]; if (TempData.Count > 0 && TempData["listReportIncome"] != null) listReport = (List<BuildingIncome>)TempData["listReportIncome"]; List<HeaderReport> lstHeader = new List<HeaderReport>(); lstHeader.Add(new HeaderReport() { StartDate = start, EndDate = end }); StiReport report = new StiReport(); string Path = Server.MapPath("~/Report/ReportIncome2.mrt"); report.Load(Path); report.RegBusinessObject("IncomeReport", listReport); report.RegBusinessObject("lstHeader", lstHeader); report.Dictionary.SynchronizeBusinessObjects(2); return StiMvcViewer.GetReportSnapshotResult(HttpContext, report); }
اینم پارشیال ویو گزارش
@using System.Web.UI.WebControls; @using Stimulsoft.Report.Mvc; <div> @Html.Stimulsoft().RenderMvcViewerScripts() @Html.Stimulsoft().StiMvcViewer("MyViewr", new StiMvcViewerOptions() { ActionGetReportSnapshot = "LoadReportIncome", ActionViewerEvent = "ViewerEvent", Theme = StiTheme.Windows7, ActionPrintReport = "PrintReport", ActionExportReport = "ExportReport", ToolbarBackgroundColor = System.Drawing.Color.Silver }) </div>
وقتی دکمه گزارش رو میزنم وارد اکشن IncomeReport میشه و میاد پارشیال ویو رو که همون گزارش هست خالی نشون میده و اصلا وارد اکشن LoadReportIncome نمیشه ، شما گفتید [HttpPost] بزارم بالاش گذاشتم باز نشد ببینید خالی نشون میده
واقعاً کچلم کرده، نمیدونم چیکار کنم
این پروژه مرحله به مرحله اش دقم داره میده
راستی آقای مدائنی نکته جال اینه که وقتی توو مرورگر تو url صفحه دستی می نویسم IncomReport قشنگ وارد هر دو اکشن میشه و گزارش رو به صورت زیر نشون میده
ولی اینجوری به کارم نمیاد ، باید توو همون فرم ایجکسی که براتون شرح دادم باشه
نمیدونید ایراد کارم چیه؟
چرا برای گزارش از Ajax استفاده کردید ؟
چرا مستقیم آدرس اکشن Report را ندادید ؟
چون توو فرمم جستجو و .. ایجکسی هست اومدیم کاربر یهسرچی کرد بعد دکمه گزارش رو زد
دکمه گزارش رو میزنه منظورتون اینه چرا ایجکسی فرستادم؟
خب چه جوری بفرستم
یه نکته اینکه آقای مدائنی من اطلاعات گریدمو توو جاوا اسکریپ دارم (لیست خود مدل الکی null هست همه bind ها و .. رو چک کردم مشکلی نداشت )مجبورم برم توو جاوا اسکریپ داده های گرید رو در بیارم و ایجکس بفرستم
حالا شما راه حل دیگه ایی دارید بگید چه جوری بفرستم
ممنونم
آقای مدائنی من یه کار کردم ببینید
گزارش رو میزنه میگم برو توو یه اکشن و مقادیر رو بفرست توو tempdata بعد از اون جا برو توو اکشن گزارش
public ActionResult IncomeReport1(List<BuildingIncome> lst, Nullable<DateTime> start, Nullable<DateTime> end) { TempData["listReportIncome"] = lst; TempData["start"] = start; TempData["end"] = end; return RedirectToAction("IncomeReport", new System.Web.Routing.RouteValueDictionary( new { controller = "Building", action = "IncomeReport"})); }
public ActionResult IncomeReport() { return View(); } public ActionResult LoadReportIncome() { Nullable<DateTime> start = null; Nullable<DateTime> end = null; List<BuildingIncome> listReport = new List<BuildingIncome>(); if (TempData.Count > 0 && TempData["start"] != null) start = (DateTime)TempData["start"]; if (TempData.Count > 0 && TempData["end"] != null) end = (DateTime)TempData["end"]; if (TempData.Count > 0 && TempData["listReportIncome"] != null) listReport = (List<BuildingIncome>)TempData["listReportIncome"]; List<HeaderReport> lstHeader = new List<HeaderReport>(); lstHeader.Add(new HeaderReport() { StartDate = start, EndDate = end }); StiReport report = new StiReport(); string Path = Server.MapPath("~/Report/ReportIncome2.mrt"); report.Load(Path); report.Compile(); report.RegBusinessObject("IncomeReport", listReport); report.RegBusinessObject("lstHeader", lstHeader); // report.Dictionary.SynchronizeBusinessObjects(2); return StiMvcViewer.GetReportSnapshotResult(HttpContext, report); }
اما متاسفانه باز وارد اکشن گزارش نمیشه و صفحه سفید نشون میده گزارش خالی نشون میده
والا کاملا گیج شدم
یک نمونه ضمیمه کنید تا براتون درست کنم
هیچ کاربری تا کنون از این پست تشکر نکرده است
با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)