簡體   English   中英

有關使用ASP.NET MVC顯示和允許編輯數據的建議?

[英]Advice on displaying and allowing editing of data using ASP.NET MVC?

我正在開始我的第一個ASP.NET MVC項目,我想就顯示數據庫數據和一般最佳實踐的可能方式獲得一些建議。

簡而言之,我的網頁正文將以類似表格的形式顯示數據庫中的數據,每個表格行均顯示相似的數據。 例如:

Name          Age       Position      Date Joined
Jon Smith     23        Striker       18th Mar 2005
John Doe      38        Defender      3rd Jan 1988

在功能方面,主要是想讓用戶能夠編輯數據,並在編輯后將編輯提交到數據庫並刷新視圖。我想刷新視圖的原因是因為數據是日期排序,如果用戶編輯日期字段,則需要重新排序。

我的主要問題是哪種架構/工具最適合滿足我的高要求?

到目前為止,從研究中我得出的初步結論是:

  1. ADO.NET用於數據檢索。 這是我以前使用過並感到滿意的東西。 我喜歡LINQ to SQL的外觀,但現在我第一次涉足MVC領域時並不想使學習曲線更陡峭。

  2. 局部視圖以創建模板,然后遍歷我從數據庫模型撤回的數據表。

  3. jQuery ,允許用戶編輯表中的數據,對已編輯的數據條目進行錯誤檢查等。

另外,我最初的觀點是,緩存數據並不是這里的關鍵要求。 用戶唯一可以更新的字段是該字段,如果這樣做,我將需要立即將該數據提交到數據庫,然后刷新視圖(因為數據按日期排序)。 有什么想法嗎?

另外,我看到了一些jQuery插件,它們模擬一個數據網格並提供相關的功能。 我最初的想法是,我不需要這些插件附帶的所有功能(例如Zebra條帶化,使用列標題中的排序字形按列進行排序的功能等),並且在這方面我並沒有真正看到任何好處以及上面我概述的解決方案。 同樣,是否有理由重新考慮這種觀點?

最后,當用戶編輯日期時,我將需要刷新視圖。 為此,我一直在閱讀有關Html.RenderAction的信息,這似乎比使用Partial Views更好,因為我可以將應用程序邏輯合並到action方法中。 我應該考慮使用Html.RenderAction還是對它的用法有誤解?

希望這篇文章清楚,不要太長。 我確實為每個主題考慮了單獨的帖子(例如Partial View vs. Html.RenderAction,何時使用jQuery datagrid插件),但是感覺這些問題是如此交織在一起,因此需要在彼此的上下文中進行處理。

謝謝

數據訪問 -如果您習慣使用ADO.NET,那就太好了。 使用Subsonic ActiveRecord和PetaPoco取得了很好的效果。 一旦安裝完成,與許多其他ORM不同,它無需花費大量的學習投入即可將整個數據訪問繁忙的工作轉移到其他地方。 它們是免費使用的,我絕對推薦它們。

-如果在業務類中檢索后要合並的幾組數據具有非常復雜的交互作用,則部分視圖可能會很有用。 但是,如果您要顯示來自一個表的數據,或者甚至是接近其最終形式的數據作為查詢結果,則沒有理由為此使用它們。 而是使用foreach循環遍歷數據並以這種方式格式化HTML。

這樣的網格狀演示非常容易。

<% foreach (var row in Model.Rows) {%>
    [HTML for one row]
<%}%>

甚至可以使用HTML表完成此操作,因為您要呈現數據表。

<table>
<% foreach (var row in Model.Rows) {%>
    <tr>
        <td>row.Element1</td>
        <td>row.Element2</td>
        <td>row.Element3</td>
    </tr>
<%}%>
</table>

網格外觀 -就外觀而言,例如根據內容對數據進行條紋或着色,使這些決策成為您發送的模型數據的一部分,並且只需在View中使用CSS類即可實現。 例如,您可以在OddEven字段中返回值“ odd”或“ even”,這是可以在樣式表中設置樣式的CSS類。

<table>
<% foreach (var row in Model.Rows) {%>
    <tr class=<%=row.OddEven%>>
        <td>row.Element1</td>
        <td>row.Element2</td>
        <td>row.Element3</td>
    </tr>
<%}%>
</table>

排序 -就使用繁重的jQuery或javascript進行排序和處理數據而言,我會等到遇到一些已知的性能問題后再開始擔心所有時間重新加載數據。 但是,如果您每次都重新加載數據,則可能會發現網格中的數據不斷刷新的問題,並且用戶發現他們失去了光標的位置或在編輯時被中斷,或者更改觸發了未完成編輯的事件在數據庫中。

盡管似乎數據網格按日期順序排列,並且有人更改了日期,但最重要的是立即重新處理數據。 我並沒有聲稱知道您的情況,但是經過多年的實踐,我發現讓用戶完成工作(例如,跳過度假村)通常對​​重新安排行更為重要,這通常意味着嘗試編輯的數據已跳到其他位置,因此他們不得不再次查找。

一個引人注目的界面可能是,隨着數據元素的更改,保存操作會在后台發送,但網格不會重新定位或求助。 當然,下次刷新頁面時,將使用該頁面,而不是在編輯會話期間。 只是一個需要考慮的想法。

客戶端交互 -如果您的應用有很多用戶和大量修改,那么如果您每次刷新一次數據都會刷新大量數據集。 但是,如果這是一個內部應用程序,其用戶或活動受限,那么這當然不是問題。 使用jQuery編輯數據的效果很好-您可以添加調用以保存數據,以進行編輯,並且可以為應用程序提供更多傳統Web應用程序所缺乏的可用性。

我會考慮使用jqGrid(jQuery網格插件)並實現內聯編輯。 創建控制器操作,將其需要的數據作為JsonResult返回。 使用Linq2SQL或Entity Framework訪問您的數據層。

主頁: http : //www.trirand.com/blog/

演示: http : //www.trirand.com/blog/jqgrid/jqgrid.html

MVC框架實際上並不偏愛一種數據訪問方法。 顯然,MVC的主要優勢之一是其可測試性的提高,因此以這樣的方式來構造代碼是有意義的,即可以將控制器與數據訪問邏輯解耦以進行單元測試。 最簡單的方法是通過存儲庫模式,您可以使用ADO.NET來實現。

要呈現表格數據,最好在視圖中使用foreach循環而不是使用局部數據來實現。 如果存在復雜的邏輯,這可能會變得混亂,但是可以使用HTML幫助程序來解決。 請參閱Rob Conery關於避免標簽湯的出色文章,以獲取有關此方面的一些提示。

我認為行編輯的最佳方法是讓每行編輯向一個編輯動作發出AJAX請求,這樣您就不必刷新所有數據。 由於MVC無縫處理動作參數的綁定,因此非常容易做到。 為此,您可以執行特定的操作,將狀態消息發送回給用戶以進行反饋。 我會為此使用自己的功能,因為它很容易做到。

要刷新所有數據,我發現最簡單的方法是使用布爾值? 視圖上的isPartial參數,如果未定義或為false,則呈現完整視圖;如果存在,則為true;則呈現局部視圖。 然后,您可以在第一個請求上正常調用相同的操作,然后在發出AJAX請求時通過isPartial = true發送。 然后,您可以使用jQuery將表的HTML更新為完整塊。 這比返回JSON並解析此客戶端要快。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM