使用MVC、AngularJS和Web API实现数据库更新

在开发Web应用程序时,经常需要将前端界面与后端数据库进行交互。随着技术的发展,出现了许多新的框架和工具,使得这一过程变得更加简单和高效。本文将通过一个示例项目,详细解释如何使用MVCAngularJS和Web API技术组合来实现数据库的更新操作。

创建MVC网站

首先,需要在Visual Studio中创建一个MVC网站。MVC(Model-View-Controller)是一种设计模式,用于将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller),以实现关注点分离。

创建数据库和实体模型

接下来,需要创建一个数据库,并在其中添加一个名为“Question”的表,该表包含两个字段:QuestionId和QuestionText。然后,需要使用Entity Framework创建一个.edmx文件,并为数据库上下文定义一个名为DBcontext的类。生成Entity Framework类后,Question模型类将如下所示:

public partial class Question { public int QuestionId { get; set; } public string QuestionText { get; set; } }

添加Web API控制器

在项目中添加一个Web API控制器,并创建以下动作方法:GetQuestion()、AddQuestion()和UpdateQuestion()。这些方法将与数据库交互,并返回JsonResult。此外,还有一个名为QuestionAdmin()的动作方法,它调用视图并触发UI。控制器类代码如下所示:

public class QAdminController : Controller { // 创建Entity Framework数据库上下文对象 DatabaseConnection DBcontext = new DatabaseConnection(); // 调用视图以在UI中显示记录 public ActionResult QuestionAdmin() { return View(); } // 获取问题 public JsonResult GetQuestion() { var questions = ( from q in DBcontext.Questions select new Question { QuestionId = q.QuestionId, QuestionText = q.QuestionText } ).ToList(); return Json(questions, JsonRequestBehavior.AllowGet); } // 插入问题 public Question AddQuestion(Question question) { DBcontext.Questions.Add(question); DBcontext.SaveChanges(); Question newQuestion = new Question(); newQuestion.QuestionId = question.QuestionId; newQuestion.QuestionText = question.QuestionText; return newQuestion; } // 更新问题 public JsonResult UpdateQuestion(Question question) { DBcontext.SaveChanges(); return GetQuestion(); } }

创建AngularJS脚本

接下来,需要创建一个AngularJS脚本,该脚本将调用WebAPI动作方法。脚本代码如下所示。请注意,在添加和更新部分的代码中,可以看到对Web APIURL的调用。这些URL将在浏览器中返回JSON结果。

var app = angular.module('qAdminModule', []); app.controller('qAdminCtrl', function($scope, $http, QuestionsService) { $scope.questionsData = null; QuestionsService.GetAllRecords().then( function(d) { $scope.questionsData = d.data; }, function() { alert('Error.. !!!'); } ); // 省略其他代码... });

创建视图页面

最后,需要创建一个视图页面,用于显示UI。在该页面中,将创建过滤控件,并使用'ng-repeat' Angular属性以表格格式显示数据。如果点击标题,将进行排序。

<asp:Content ID="Content3" runat="server"> <!-- 添加angular.min.js到项目文件夹并指定路径 --> <script src="../../Common/angular.min.js"></script> <script src="../../Scripts/QuestionAdmin.js"></script> <div ng-app="qAdminModule" id="body"> <div ng-controller="qAdminCtrl"> <!-- 创建过滤UI以搜索结果 --> <label for="QuestionId">QuestionId:</label> <input type="text" ng-model="searchQuestionId" style="width:100px"> <label for="QuestionText">Question:</label> <input type="text" ng-model="searchQuestion" style="width:600px"> <!-- 添加记录 --> <a ng-click="createNew = !createNew">Create New</a> <table ng-show="createNew"> <tr> <td> <label for="QuestionId">QuestionId</label> </td> <td> <input type="text" data-ng-model="Question.QuestionId" style="width:50px"/> </td> </tr> <tr> <td> <label for="QuestionText">Question</label> </td> <td> <input type="text" data-ng-model="Question.QuestionText" style="width:500px"/> </td> </tr> <tr> <td> <button data-ng-click="save()" style="width:100px">Save</button> </td> <td> <button data-ng-click="clear()" style="width:100px">Clear</button> </td> </tr> </table> <br/> <!-- 表格显示行 --> <table class="grid" style="border-collapse:collapse;"> <th ng-click="sortType = 'QuestionId' ; sortReverse = !sortReverse">ID</th> <th ng-click="sortType = 'QuestionText' ; sortReverse = !sortReverse" style="width:500px">Question Text</th> <tr ng-repeat="items in questionsData | orderBy:sortType:sortReverse | filter: { QuestionText : searchQuestion}" style="white-space: nowrap;"> <td>{{items.EPPQuestionId}}</td> <td>{{items.QuestionText}}</td> </tr> </table> </div> </div> </asp:Content>
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485