MVC框架 - AJAX支持

Ajax是异步JavaScript和XML的一个简写形式。MVC框架包含了不显眼的Ajax内置支持,通过它可以使用辅助方法,在所有的视图添加代码来定义Ajax特性。 在MVC中此特征是基于jQuery的功能。

为不使注意AJAX支持,在MVC应用程序,打开Web.config文件,并使用下面的代码设置appSettings部分内的UnobtrusiveJavaScriptEnabled属性。如果键已经存在于应用程序,可以忽略这一步。

<add key="UnobtrusiveJavaScriptEnabled" value="true" />

在这之后,打开位于下Views/Shared文件夹中,见到布局文件_Layout.cshtml文件。 我们将引用添加jQuery库到这里了,使用下面的代码:

<script src="~/Scripts/jquery-ui-1.8.24.min.js" type="text/javascript"></script>
<script src="~/Scripts/jquery.unobtrusive-ajax.min.js" type="text/javascript"></script>

创建一个Ajax应用程序

在以下的例子中,我们将创建这将显示系统中的用户的列表的形式。 我们将会把有三个选项的下拉列表:管理员,普通和来宾。当将选择其中的一个值,它会显示属于使用AJAX获取这一类的用户列表。

步骤1:

创建一个模型文件Model.cs并复制下面的代码:

using System;

namespace MVCAjaxSupportExample.Models
{
    public class User
    {
        public int UserId { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public DateTime BirthDate { get; set; }
        public Role Role { get; set; }
    }

    public enum Role
    {
        Admin,
        Normal,
        Guest
    }
}

步骤2:

创建一个控制器文件名为UserController.cs并创建里面有两个动作方法如下所示:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web.Mvc;
using MVCAjaxSupportExample.Models;

namespace MVCAjaxSupportExample.Controllers
{
    public class UserController : Controller
    {
        private readonly User[] userData =
        {
            new User {FirstName = "Edy", LastName = "Clooney", Role = Role.Admin},
            new User {FirstName = "David", LastName = "Sanderson", Role = Role.Admin},
            new User {FirstName = "Pandy", LastName = "Griffyth", Role = Role.Normal},
            new User {FirstName = "Joe", LastName = "Gubbins", Role = Role.Normal},
            new User {FirstName = "Mike", LastName = "Smith", Role = Role.Guest}
        };

        public ActionResult Index()
        {
            return View(userData);
        }

        public PartialViewResult GetUserData(string selectedRole = "All")
        {
            IEnumerable data = userData;
            if (selectedRole != "All")
            {
                var selected = (Role) Enum.Parse(typeof (Role), selectedRole);
                data = userData.Where(p => p.Role == selected);
            }
            return PartialView(data);
        }

        public ActionResult GetUser(string selectedRole = "All")
        {
            return View((object) selectedRole);
        }
    }
}

步骤3:

现在,用下面的代码创建一个名为GetUserData的局部视图。该视图将用于显示基于从下拉列表中选择的角色的用户的列表。

@model IEnumerable<MVCAjaxSupportExample.Models.User>

<table>
    <tr>
        <th>
            @Html.DisplayNameFor(model => model.FirstName)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.LastName)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.BirthDate)
        </th>
        <th></th>
    </tr>

@foreach (var item in Model) {
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.FirstName)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.LastName)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.BirthDate)
        </td>
        <td>

        </td>
    </tr>
}

</table>

步骤4:

现在创建一个getUser视图使用下面的代码。这个视图将异步从先前创建的控制器的GetUserData动作得到数据。

@using MVCAjaxSupportExample.Models
@model string
@{
ViewBag.Title = "GetUser";
AjaxOptions ajaxOpts = new AjaxOptions {
UpdateTargetId = "tableBody"
};
}
<h2>Get User</h2>
<table>
    <thead><tr><th>First</th><th>Last</th><th>Role</th></tr></thead>
        <tbody id="tableBody">
            @Html.Action("GetUserData", new {selectedRole = Model })
        </tbody>
</table>

@using (Ajax.BeginForm("GetUser", ajaxOpts)) {
    <div>
        @Html.DropDownList("selectedRole", new SelectList(
        new [] {"All"}.Concat(Enum.GetNames(typeof(Role)))))
        <button type="submit">Submit</button>
    </div>
}

步骤5:

最后只是改变Route.config项,启动用户控制器。

defaults: new { controller = "User", action = "GetUser", id = UrlParameter.Optional }

步骤6:

最后,运行这将看起来像下面的截图中的应用:

如果从下拉菜单中选择管理员(Admin),它会去获取所有具有管理员类型的用户。这是通过AJAX发生,不需要重新加载整个页面。


时间: 2024-10-16 12:40:59

MVC框架 - AJAX支持的相关文章

MVC框架模式技术实例(用到隐藏帧、json、仿Ajax、Dom4j、jstl、el等)

前言: 刚刚学完了MVC,根据自己的感悟和理解写了一个小项目. 完全按照MVC模式,后面有一个MVC的理解示意图. 用MVC模式重新完成了联系人的管理系统: 用户需求: 多用户系统,提供用户注册.登录功能,对于没有登录的用户,不允许使用任何功能. 可以查询.增加和删除联系人信息. 详细设计: 数据结构设计. 功能模块设计. 工具类设计. 搭建初步的项目框架.其他功能:防止用户重复提交.注册和登录时使用验证码. 项目代码在后面. 演示效果: 主页: 注册页面: MVC介绍: MVC全名是Model

[转]深入ASP.NET MVC之九:Ajax支持

本文转自:http://www.cnblogs.com/yinzixin/archive/2012/12/22/2824384.html 目前前端页面和服务端进行Ajax交互大多采用的都是jQuery, ASP.NET MVC提供了一些方法使得这个过程变得更加容易.常见的Ajax应用场景有两种,一个是点击一个链接,然后局部加载一些内容,可以是html片段,也可能是json数据,然后通过前端js处理之后显示:另一个是异步提交表单.这些帮助方法都是位于AjaxExtensions种的扩展方法.先看第

【Spring学习笔记-MVC-5】利用spring MVC框架,实现ajax异步请求以及json数据的返回

作者:ssslinppp      时间:2015年5月26日 15:32:51 1. 摘要 本文讲解如何利用spring MVC框架,实现ajax异步请求以及json数据的返回. Spring MVC与json参考文章:[spring学习笔记-mvc-3]返回json数据-方式1  和 [spring学习笔记-mvc-4]返回json数据-方式2. 使用到的技术主要如下: Ajax:使用JQuery 提供的ajax:==>需要引入jquery.min.js文件: Spring MVC: Jso

改变mvc web api 支持android ,ios ,ajax等方式跨域调用

公司一个移动后端的项目用到了 webapi 项目搭建到外网环境共app开发者调用测试接口时遇到了一个问题 接口不允许跨域调用 .查阅资料明白 同源策略原则根据请求报头值 Origin 与回应报头值 Access-Control-Allow-Origin 来判断是否允许调用 解决方法 1.ajax使用jsonp jsonp 是通过请求参数中加入回调函数参数值.webapi 收到回调函数参数值返回数据不再是单纯的json,而是根据回调函数参数值 的js方法调用,这样就避免的同源策略 需要webapi

通过ASP.NET MVC框架 + 原生JavaScript + Ajax + SQL SERVER 实现一个简单的有论坛功能的网站(有通过iis发布的例子)

ASP.NET MVC. M 为Model模型层, V 为View视图层, C 为Controller控制层.要想使用MVC框架来写网站就需要了解M V C 的作用分别为哪些.给大家简单的介绍一下: 1.当你的这个网站要与数据库交互的时候,你可以使用EF创建一个数据库模型,也可以用类存放你所需交互的字段数据.我们往往把这类文件放在model层. 2.view层,存放前端网页的. 3.controller层实现前端网页功能的,在这个层里面我们编写的方法称为action. www.lazyfitne

Spring与Web框架(例如Spring MVC)漫谈——关于Spring对于多个Web框架的支持

在看Spring MVC的官方文档时,最后一章是关于Spring对于其它Web框架的支持(如JSF,Apache Struts 2.x,Tapestry 5.x),当然Spring自己的MVC框架Spring MVC就不用多说了. 这里并不想讨论其它的Web框架,而是记录下这章开头提到的关于Spring为何还要支持其它Web框架. Spring Framwork的一个核心价值观是:允许开发者自由选择. 一般而言,Spring并不会强迫你使用或者购买某些特别的架构.技术或者方案,尽管它们肯定会特别

主流MVC框架的设计模式及遵守的软件设计原则

原文地址,会不断更新  http://it.zuocheng.net/mvc-design-pattern-design-principle-summary   作程的技术博客 本文以主流的MVC框架为例,比如Java 的SSH.PHP的Symfony和Zend Framework ,在简单地剖析他们的设计原理之后,找到其中使用的设计模式:鉴赏他们的代码实现,查看设计者们都遵守了哪些软件设计原则.作此文,一为学习,二为总结.其中下面所写内容可能并不全面,也可能不准确,但会不断修改完善. 框架模式

同是流行MVC框架,比较Strtus2和SpringMVC的区别

Struts2和SpringMVC是比较流行的MVC框架,二者的工作流程大体相似,从下面两张图就可以看出. SpringMVC工作流程图 图二 SpringMVC的工作流程描述 1. 用户向服务器发送请求,请求被Spring前端控制Servelt DispatcherServlet捕获: 2. DispatcherServlet对请求URL进行解析,得到请求资源标识符(URI).然后根据该URI,调用HandlerMapping获得该Handler配置的所有相关的对象(包括Handler对象以及

【JavsScript】JavaScript MVC 框架技术选型

你很喜欢Gmail和Trello之类的单页面应用,但是不太确定该从何开始.也许你的JavaScript代码是如此的杂乱无章,以致于你很想在下一个项目上尝试下JavaScript MVC库和框架,却苦于没有头绪?我正在撰写一本单页面应用的书,所以我阅读了大量网上的相关资料.在这里我尝试提供一些看法,希望可以帮助你下决定. 简介 这里讨论的是时下最热的框架,AngularJS.Backbone.Ember和Knockout.同时提到了Batman.CANjs.Meteor和Spine,但是没有详细展