翻譯|使用教程|編輯:顏馨|2023-05-09 11:14:19.233|閱讀 166 次
概述:本章介紹dhtmlxGantt 與 ASP.NET MVC(下),歡迎查閱!
# 界面/圖表報(bào)表/文檔/IDE等千款熱門(mén)軟控件火熱銷(xiāo)售中 >>
相關(guān)鏈接:
DHTMLX Gantt是用于跨瀏覽器和跨平臺(tái)應(yīng)用程序的功能齊全的Gantt圖表。可滿(mǎn)足項(xiàng)目管理應(yīng)用程序的大部分開(kāi)發(fā)需求,具備完善的甘特圖圖表庫(kù),功能強(qiáng)大,價(jià)格便宜,提供豐富而靈活的JavaScript API接口,與各種服務(wù)器端技術(shù)(PHP,ASP.NET,Java等)簡(jiǎn)單集成,滿(mǎn)足多種定制開(kāi)發(fā)需求。
DHTMLX JavaScript UI 庫(kù)所開(kāi)發(fā)的 JavaScript 組件易于使用且功能豐富,非常適合任何領(lǐng)域和任何復(fù)雜性的解決方案,能夠節(jié)省創(chuàng)建和維護(hù)業(yè)務(wù)應(yīng)用程序的時(shí)間,提高生產(chǎn)力。
甘特圖控件交流群:764148812
異常篩選器可用于捕獲 CRUD 處理程序中的異常并返回客戶(hù)端響應(yīng) 客戶(hù)端甘特圖可以識(shí)別。
要為甘特圖提供錯(cuò)誤處理,請(qǐng)執(zhí)行以下步驟:
轉(zhuǎn)到App_Start并添加一個(gè)名為 GanttAPIExceptionFilterAttribute 的新類(lèi):
using System.Net; using System.Net.Http; using System.Web.Http.Filters; namespace DHX.Gantt.Web { public class GanttAPIExceptionFilterAttribute : ExceptionFilterAttribute { public override void OnException(HttpActionExecutedContext context) { context.Response = context.Request.CreateResponse( HttpStatusCode.InternalServerError, new { action = "error", message = context.Exception.Message } ); } } }
然后我們將此類(lèi)添加到我們的 WebAPI 控制器中:
namespace DHX.Gantt.Web.Controllers { [GanttAPIExceptionFilter] public class DataController : ApiController
namespace DHX.Gantt.Web.Controllers { [GanttAPIExceptionFilter] public class LinkController : ApiController
namespace DHX.Gantt.Web.Controllers { [GanttAPIExceptionFilter] public class TaskController : ApiController
現(xiàn)在,如果任何 Web API 控制器在處理請(qǐng)求時(shí)觸發(fā)異常, 客戶(hù)端將收到錯(cuò)誤狀態(tài)和錯(cuò)誤消息,可以以某種方式處理或向用戶(hù)顯示。
請(qǐng)注意,向客戶(hù)端返回異常消息可能不是生產(chǎn)環(huán)境的最佳主意。
客戶(hù)端甘特圖允許使用拖放對(duì)任務(wù)進(jìn)行重新排序。因此,如果您使用此功能,則必須將此訂單存儲(chǔ)在數(shù)據(jù)庫(kù)中。 您可以在此處查看常見(jiàn)說(shuō)明。
現(xiàn)在讓我們將此功能添加到我們的應(yīng)用程序中。
首先,我們需要允許用戶(hù)在 UI 中更改任務(wù)順序。
打開(kāi)索引視圖并更新甘特圖的配置:
gantt.config.order_branch = true; gantt.config.order_branch_free = true; // specifying the date format gantt.config.date_format = "%Y-%m-%d %H:%i"; // initializing gantt gantt.init("gantt_here");
現(xiàn)在,讓我們?cè)诤蠖朔从尺@些更改。
我們將訂單存儲(chǔ)在名為 SortOrder 的屬性中,因此讓我們相應(yīng)地更新 Task 類(lèi):
using System; using System.ComponentModel.DataAnnotations; namespace DHX.Gantt.Web.Models { public class Task { public int Id { get; set; } [MaxLength(255)] public string Text { get; set; } public DateTime StartDate { get; set; } public int Duration { get; set; } public decimal Progress { get; set; } public int? ParentId { get; set; } public string Type { get; set; } public int SortOrder { get; set; } } }
現(xiàn)在我們需要更新任務(wù)控制器,即:
namespace DHX.Gantt.Web.Controllers { [GanttAPIExceptionFilter] public class TaskController : ApiController { private GanttContext db = new GanttContext(); // GET api/Task public IEnumerable<TaskDto> Get() { return db.Tasks .OrderBy(t => t.SortOrder) .ToList() .Select(t => (TaskDto)t); }
namespace DHX.Gantt.Web.Controllers { [System.Web.Http.HttpPost] public IHttpActionResult CreateTask(TaskDto taskDto) { var newTask = (Task)taskDto; newTask.SortOrder = db.Tasks.Max(t => t.SortOrder) + 1; db.Tasks.Add(newTask); db.SaveChanges(); return Ok(new { tid = newTask.Id, action = "inserted" }); }
當(dāng)用戶(hù)更改任務(wù)順序時(shí),gantt 將調(diào)用 PUT 操作,在請(qǐng)求的“target”屬性中提供有關(guān)新任務(wù)位置的信息,以及任務(wù)屬性的其余部分。
因此,我們應(yīng)該為任務(wù) DTO 類(lèi)添加一個(gè)額外的屬性:
namespace DHX.Gantt.Web.Models { public class TaskDto { public int id { get; set; } public string text { get; set; } public string start_date { get; set; } public int duration { get; set; } public decimal progress { get; set; } public int? parent { get; set; } public string type { get; set; } public bool open{ get { return true; } set { } } public string target { get; set; } ... } }
現(xiàn)在我們將在 PUT (EditTask) 操作中實(shí)現(xiàn)重新排序:
// PUT api/Task/5 [System.Web.Http.HttpPut] public IHttpActionResult EditTask(int id, TaskDto taskDto) { var updatedTask = (Task)taskDto; updatedTask.Id = id; if (!string.IsNullOrEmpty(taskDto.target)) { // reordering occurred this._UpdateOrders(updatedTask, taskDto.target); } db.Entry(updatedTask).State = EntityState.Modified; db.SaveChanges(); return Ok(new { action = "updated" }); } private void _UpdateOrders(Task updatedTask, string orderTarget) { int adjacentTaskId; var nextSibling = false; var targetId = orderTarget; // adjacent task id is sent either as '{id}' or as 'next:{id}' depending // on whether it's the next or the previous sibling if (targetId.StartsWith("next:")) { targetId = targetId.Replace("next:", ""); nextSibling = true; } if (!int.TryParse(targetId, out adjacentTaskId)) { return; } var adjacentTask = db.Tasks.Find(adjacentTaskId); var startOrder = adjacentTask.SortOrder; if (nextSibling) startOrder++; updatedTask.SortOrder = startOrder; var updateOrders = db.Tasks .Where(t => t.Id != updatedTask.Id) .Where(t => t.SortOrder >= startOrder) .OrderBy(t => t.SortOrder); var taskList = updateOrders.ToList(); taskList.ForEach(t => t.SortOrder++); }
當(dāng)應(yīng)用在 IIS 上運(yùn)行時(shí),HTTP PUT 和 DELETE 請(qǐng)求返回 405 或 401 錯(cuò)誤。 此問(wèn)題可能是由 WebDAV 模塊引起的,該模塊可能與 RESTful 處理程序沖突。
作為常見(jiàn)的解決方案,可以從 web.config 文件中禁用該模塊。此處提供了更多詳細(xì)信息。
甘特圖不提供任何方法來(lái)防止應(yīng)用程序受到各種威脅,例如SQL注入或XSS和CSRF攻擊。重要的是,確保應(yīng)用程序安全的責(zé)任在于實(shí)現(xiàn)后端的開(kāi)發(fā)人員。閱讀相應(yīng)文章中的詳細(xì)信息。
如果在 Visual Studio 2022 中找不到必要的“ASP.NET Web 應(yīng)用程序”項(xiàng)目模板,請(qǐng)執(zhí)行以下步驟:
1. 關(guān)閉視覺(jué)工作室 2022
2. 開(kāi)始菜單 - > Visual Studio 安裝程序
3. 查找視覺(jué)工作室社區(qū) 2022 ->點(diǎn)擊修改
4. 在打開(kāi)的窗口中,選擇單個(gè)組件,選中列表中的“.NET Framework 項(xiàng)目和項(xiàng)模板”點(diǎn),然后單擊“修改”
之后,您可以啟動(dòng) Visual Studio 2022 并找到必要的模板。
初始化數(shù)據(jù)庫(kù)時(shí)發(fā)生異常
有時(shí),您可能會(huì)遇到 DropCreateDatabaseIfModelChanges 初始值設(shè)定項(xiàng)的問(wèn)題,該初始值設(shè)定項(xiàng)會(huì)刪除現(xiàn)有數(shù)據(jù)庫(kù),但不創(chuàng)建新數(shù)據(jù)庫(kù)。
在這種情況下,打開(kāi) GanttInitializer.cs并將 DropCreateDatabaseIfModelChanges 替換為 DropCreateDatabaseAlways:
using System; using System.Collections.Generic; using System.Data.Entity; namespace DHX.Gantt.Web.Models { public class GanttInitializer : DropCreateDatabaseAlways<GanttContext> { ... } }
然后再次運(yùn)行該應(yīng)用程序。
如果您已完成上述步驟以實(shí)現(xiàn)甘特圖與 MVC ASP.NET 集成,但甘特圖未在頁(yè)面上呈現(xiàn)任務(wù)和鏈接,請(qǐng)查看排查后端集成問(wèn)題一文。它描述了確定問(wèn)題根源的方法。
DHTMLX Gantt享有超十年聲譽(yù),支持跨瀏覽器和跨平臺(tái),性?xún)r(jià)比高,可滿(mǎn)足項(xiàng)目管理控件應(yīng)用的所有需求,是較為完善的甘特圖圖表庫(kù)
甘特圖控件交流群:764148812
歡迎進(jìn)群交流討論,獲取更多幫助請(qǐng)聯(lián)系
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@fc6vip.cn