使用Ajax更新ASP.Net MVC項(xiàng)目中的報(bào)表對(duì)象方法
Ajax技術(shù)顯著加快了Web應(yīng)用程序的速度。另外,視覺效果方面也有提升。大家都同意,每次點(diǎn)擊按鈕時(shí)整個(gè)頁面都會(huì)被刷新這一點(diǎn)不太友好。如果你的網(wǎng)速不是很快,那么這個(gè)過程會(huì)很煩人,因?yàn)樗械脑囟紩?huì)先消失,再慢慢重新出現(xiàn)。如果只刷新一部分頁面,那就美滋滋了。而這正是Ajax所提供的。該腳本向服務(wù)器發(fā)送一個(gè)請(qǐng)求,以更新所需的部分信息。然后,腳本將更新的數(shù)據(jù)插入頁面上的正確位置。
在這個(gè)頁面中,我想用一個(gè)簡(jiǎn)單的方法通過Ajax更新ASP .Net MVC項(xiàng)目中的信息。這種方法被稱為“unobtrusive Ajax” - Microsoft Unobtrusive Ajax。其底線是使用Unobtrusive庫,并且,輔助程序允許你使用Ajax而無需編寫任何JavaScript代碼。這個(gè)例子會(huì)非常簡(jiǎn)單,適合初學(xué)者。那么,我們開始吧。
要在一個(gè)MVC項(xiàng)目中使用FastReport.Net報(bào)表生成器自帶的WebReport組件,你需要調(diào)整一些配置。即,編輯Web.Config文件并添加必要的庫。
將FastReport和FastReport.Web庫添加到你的項(xiàng)目中。
在Web.config中添加處理句柄,它位于項(xiàng)目的根目錄中:
<system.webServer> <handlers> <add name="FastReportHandler" path="FastReport.Export.axd" verb="*" type="FastReport.Web.Handlers.WebExport"/> </handlers> </system.webServer>
在位于Views文件夾中的Web.config文件中添加命名空間。
<namespaces> <add namespace="FastReport" /> <add namespace="FastReport.Web" /> </namespaces>
在_Layout.cshtml文件的<head>部分添加腳本和樣式:
<head> @WebReportGlobals.Scripts() @WebReportGlobals.Styles() </head>
現(xiàn)在我們切換到HomeController.cs。在這里,我們放置業(yè)務(wù)邏輯:
我已經(jīng)創(chuàng)建了全局報(bào)表對(duì)象:
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using FastReport.Web; using System.Web.UI.WebControls; using System.Globalization; using WebLocalization.Models; namespace WebLocalization.Controllers { public class HomeController : Controller { private WebReport webReport = new WebReport(); // report object is available within the class private string report_path = "J:\\Program Files (x86)\\FastReports\\FastReport.Net\\Demos\\Reports\\"; //reports folder public ActionResult Index() { SetReport(); //method of loading report and DB ViewBag.WebReport = webReport; //pass the Web Report into the View return View(); } public void SetReport() { System.Data.DataSet dataSet = new System.Data.DataSet(); //create data set dataSet.ReadXml(report_path + "nwind.xml"); //Load xml database webReport.Report.RegisterData(dataSet, "NorthWind"); // register the data source in the report object webReport.Report.Load(report_path + "Simple Interactive.frx"); //load the report into WebReport object webReport.Width = Unit.Percentage(100); webReport.Height = Unit.Percentage(100); }
如你所見,Index方法只包含了報(bào)表的加載,并通過ViewBag將其傳遞給視圖。我將報(bào)表上傳到單獨(dú)的 SetReport() 方法。
現(xiàn)在考慮Index.cshtml的視圖:
<script src="http://ajax.aspnetcdn.com/ajax/jquery/jquery-2.1.4.min.js"></script> <script src="http://ajax.aspnetcdn.com/ajax/jquery.migrate/jquery-migrate-1.2.1.min.js"></script> <script src="http://ajax.aspnetcdn.com/ajax/jquery.validate/1.13.1/jquery.validate.min.js"></script> <script src="http://ajax.aspnetcdn.com/ajax/mvc/5.2.2/jquery.validate.unobtrusive.min.js"></script> <script src="http://ajax.aspnetcdn.com/ajax/mvc/3.0/jquery.unobtrusive-ajax.min.js"></script> @{ ViewBag.Title = "Home Page"; } @using (Ajax.BeginForm("Update", "Home", new AjaxOptions { UpdateTargetId = "UpdateHere" //HttpMethod = "POST", //InsertionMode = InsertionMode.Replace, })) { @Html.CheckBox("condition", true) <input id="sel" type="submit" value="Select" /> } <div id="UpdateHere"> @ViewBag.WebReport.GetHtml() </div> </div>
在開始的時(shí)候,我決定從官網(wǎng)上源 https://www.asp.net/ajax/cdn 下載必要的庫。但是你也可以使用NuGet包安裝庫。
最有趣的是助手Ajax.BeginForm()。前兩個(gè)參數(shù)表示動(dòng)作(方法)和控制器。更新方法將在稍后創(chuàng)建。這個(gè)助手與 Html.BeginForm() 非常相似。只多加了一個(gè)參數(shù) - "AjaxOptions"。你可以在MSDN中閱讀有關(guān)這些選項(xiàng)的更多信息。其中最重要的是UpdateTargetId。正如你所理解的,它指示了要顯示更改的元素的標(biāo)識(shí)符。在我們的例子中,是<div id="UpdateHere"> 。但 @ ViewBag.WebReport.GetHtml() 元素已經(jīng)顯示在其中。這樣做是為了在頁面首次加載時(shí)從Index方法顯示報(bào)表。
我在助手中顯示復(fù)選框和按鈕。該復(fù)選框?qū)⒅甘緢?bào)表工具欄的狀態(tài) - 啟用/禁用。
讓我們回到控制器:
public ActionResult Index(string condition) { SetReport(); ToolbarCondition(condition); ViewBag.WebReport = webReport; return View(); }
在Index方法中,我們傳遞條件參數(shù) - 視圖中復(fù)選框的狀態(tài)。此外,它還添加了一個(gè)調(diào)用ToolbarCondition方法(條件)。它將處理參數(shù)并啟用或禁用報(bào)表工具欄。我們來寫這個(gè)方法:
public void ToolbarCondition(string condition) { if (condition=="true") webReport.ShowToolbar = true; else webReport.ShowToolbar = false; }
現(xiàn)在,添加另一個(gè)將返回分部視圖的方法。這要求Ajax請(qǐng)求僅更新頁面的一部分,而不是整個(gè)頁面:
[HttpPost] public ActionResult Update(string condition) { SetReport(); ToolbarCondition(condition); ViewBag.WebReport = webReport; return PartialView("Update"); }
[HttpPost] 行表示該方法接受Post請(qǐng)求。我們的行動(dòng)需要一個(gè)參數(shù)條件,以及索引。實(shí)際上,一切都是重復(fù)的,但最終我們得到了將被插入視圖索引的分部視圖。現(xiàn)在我們需要添加這個(gè)視圖。
右鍵點(diǎn)擊方法名稱:
然后選擇“添加視圖...”:
添加一個(gè)新的視圖。讓我們編輯它:
@ViewBag.WebReport.GetHtml()
這就是我所有的代碼。
你可以運(yùn)行該應(yīng)用程序:
打開復(fù)選框并點(diǎn)擊按鈕:
在這種情況下,只有WebReport對(duì)象被更新,而不是整個(gè)頁面。當(dāng)頁面上有很多信息,且完全刷新會(huì)占用過多的時(shí)間和資源成本,這就很有用了。
以上這篇使用Ajax更新ASP.Net MVC項(xiàng)目中的報(bào)表對(duì)象方法就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
asp.net使用AJAX實(shí)現(xiàn)無刷新分頁
AJAX(Asynchronous JavaScript and XML)是一種進(jìn)行頁面局部異步刷新的技術(shù)。用AJAX向服務(wù)器發(fā)送請(qǐng)求和獲得服務(wù)器返回的數(shù)據(jù)并且更新到界面中,不是整個(gè)頁面刷新,而是在頁面中使用Js創(chuàng)建XMLHTTPRequest對(duì)象來向服務(wù)器發(fā)出請(qǐng)求以及獲得返回的數(shù)據(jù)。2014-11-11ASP.NET中MVC使用AJAX調(diào)用JsonResult方法并返回自定義錯(cuò)誤信息
這篇文章主要介紹了ASP.NET中MVC使用AJAX調(diào)用JsonResult方法并返回自定義錯(cuò)誤信息的相關(guān)資料,需要的朋友可以參考下2014-11-11.NetCore?Web?Api?利用ActionFilterAttribute統(tǒng)一接口返回值格式及問題解析
在實(shí)際項(xiàng)目開發(fā)過程中,統(tǒng)一API返回值格式對(duì)前端或第三方調(diào)用將是非常必要的,在.NetCore中我們可以通過ActionFilterAttribute來進(jìn)行統(tǒng)一返回值的封裝,對(duì).NetCore?Web?Api?統(tǒng)一接口返回值格式相關(guān)知識(shí)感興趣的朋友一起看看吧2022-03-03IIS7偽靜態(tài)web.config配置的方法和規(guī)則
本文主要介紹IIS7上配置偽靜態(tài)的超簡(jiǎn)單的新方法,安裝URLRewrite插件,配置web.config即可。2016-04-04- 就是有時(shí)候窗口不能夠成功置頂,這時(shí)需要重新切換下標(biāo)簽,就可以置頂了,本文介紹C# SetWindowPos實(shí)現(xiàn)窗口置頂?shù)姆椒?/div> 2012-12-12
mstest實(shí)現(xiàn)類似單元測(cè)試nunit中assert.throws功能
我們做單元測(cè)試NUnit中,有一個(gè)斷言Assert.Throws很好用,現(xiàn)在我們來擴(kuò)展一下也實(shí)現(xiàn)類似成功能,大家參考使用吧2014-01-01ASP.NET中 Execl導(dǎo)出的六種方法實(shí)例
這篇文章主要介紹了ASP.NET中 Execl導(dǎo)出的六種方法實(shí)例,有需要的朋友可以參考一下2013-12-12ASP.NET Core使用AutoMapper實(shí)現(xiàn)實(shí)體映射
本文詳細(xì)講解了ASP.NET Core使用AutoMapper實(shí)現(xiàn)實(shí)體映射的方法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-03-03.NET異步編程總結(jié)----四種實(shí)現(xiàn)模式代碼總結(jié)
本篇文章主要介紹了.NET異步編程總結(jié)----四種實(shí)現(xiàn)模式,詳細(xì)的介紹了每種方法的實(shí)現(xiàn)和實(shí)例,具有一定的參考價(jià)值,有興趣的可以了解一下。2016-12-12最新評(píng)論