在ASP.NET MVC的视图页向控制器传递异步数据,可能是数组,JavaScript对象,json,表单数据,等等。

关于数据,JavaScript对象有时候和json长得一模一样,有么有?

var person = {Name: 'darren', Age: 21};
以上是一个JavaScript对象。不过也可以这样表示:

var person = {"Name":"darren","Age":21};
以上JavaScript对象的另外一种表达方式,恰恰也符合json的表达方式。不过,JavaScript对象的写法推荐使用第一种方式。

关于异步ajax发送;data属性表示传递的数据;contentType树形的默认值是application/x-www-form-urlencoded,表示客户端请求类型;dataType表示从服务端返回的类型,可以是text, xml, json, script, html, jsonp。

而在服务端,通过Request.Form属性可以获得从客户端传递来的异步数据。

□ 传递JavaScript对象

在Home/Index.cshtml视图中,使用jQuery发出一个异步请求,把返回的html内容加载到当前视图中。

@{
    ViewBag.Title = "Index";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

<h2>Index</h2>

<div id="result"></div>

@section scripts
{
    <script type="text/javascript">
        $(function() {
            var person = {Name: 'Darren', Age: 21};
            $.ajax({
                type: 'GET',
                url: '@Url.Action("GetInfo","Home")',
                data: person,
                datatype: 'html',
                success:function(data) {
                    $('#result').html(data);
                }
            });
        });
    </script>
}


HomeController中从Request.Form中获取数据,并返回强类型部分视图。

    public class HomeController : Controller
    {

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

        public ActionResult GetInfo()
        {
            //从表单中获取的数据
            var person = new Person();
            person.Name = Request["Name"];
            person.Age = int.Parse(Request["Age"]);

            return PartialView("_DisplayJavaScriptObject", person);
        }
    }


Home/_DisplayJavaScriptObject.cshtml强类型视图展示数据。

@model MvcApplication1.Models.Person


<div>
    <h3>从表单中读出的数据</h3>
    <p><span>Name:</span><span>@Model.Name</span></p>
    <p><span>Age:</span><span>@Model.Age</span></p>
</div>


□ 传递数组

传递数组的时候有几点需注意:
1、需要把数组toString()后作为json数据传递,toString()后数组变成以逗号隔开的字符串
2、是以Query String的形式传递给服务端的
3、服务端为了获取集合数据,需要split数组字符串

在Home/Index.cshtml视图中,使用jQuery发送异步GET请求时,数组ids需要toString()转换成"1,2,3"形式的字符串。

@{
    ViewBag.Title = "Index";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

<h2>Index</h2>

<div id="result"></div>

@section scripts
{
    <script type="text/javascript">
        $(function() {
            var ids = [1, 2, 3];
            $.ajax({
                type: 'GET',
                url: '@Url.Action("GetInfo","Home")',
                data: { myArr: ids.toString() },
                datatype: 'html',
                success:function(data) {
                    $('#result').html(data);
                }
            });
        });
    </script>
}


在HomeController中,通过Request.QueryString来获取数组字符串,最后再split转换成集合。

    public class HomeController : Controller
    {

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

        public ActionResult GetInfo()
        {
            string temp = Request.QueryString["myArr"];
            List<int> result = new List<int>();
            string[] tempArr = temp.Split(',');
            foreach (var item in tempArr)
            {
                result.Add(int.Parse(item));
            }
            ViewData["t"] = result;

            return PartialView("_DisplayJavaScriptObject");
        }
    }


Home/_DisplayJavaScriptObject.cshtml从ViewData中取出数据遍历集合展示数据。

@foreach (var item in ViewData["t"] as IEnumerable<int>)
{
    <span>@item.ToString()</span>
}

□ 传递表单数据

传递表单数据的时候有几点需注意:
1、通过$('#myForm').serialize()把表单数据封装起来
2、控制器Action方法需要打上[HttpPost]
3、控制器Action方法,可以通过强类型参数来接收,也可通过Request["Name"]的方式获取数据

在Home/Index.cshtml视图中,使用jQuery发送异步POST请求时,使用$('#myForm').serialize()把表单数据封装起来。

@{
    ViewBag.Title = "Index";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

<h2>Index</h2>

<div>
    <form id="myForm">
        <div>
            @Html.Label("Name","姓名")
            @Html.TextBox("Name","Darren")
        </div>
        <div>
            @Html.Label("Age","年龄")
            @Html.TextBox("Age","21")
        </div>
    </form>
    <div>
        <button id="btn">提交</button>
    </div>
</div>

<div id="result"></div>

@section scripts
{
    <script type="text/javascript">
        $(function() {
            $('#btn').on("click", function() {
                $.ajax({
                    type: 'POST',
                    url: '@Url.Action("GetInfo","Home")',
                    data: $('#myForm').serialize(),
                    dataType: 'html',
                    success: function(data) {
                        $('#result').html(data);
                    }
                });
            });
        });
    </script>
}


在HomeController中,需要在GetInfo方法上打上[HttpPost],用强类型参数来接收数据。

    public class HomeController : Controller
    {

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

        [HttpPost]
        public ActionResult GetInfo(Person person)
        {
            return PartialView("_DisplayJavaScriptObject", person);
        }
    }

Home/_DisplayJavaScriptObject.cshtml强类型视图展示数据。

@model MvcApplication1.Models.Person


<div>
    <h3>从表单中读出的数据</h3>
    <p><span>Name:</span><span>@Model.Name</span></p>
    <p><span>Age:</span><span>@Model.Age</span></p>
</div>


□ 传递json数据

传递json数据需注意的是:
1、json格式要写对:{ "Name":"Darren","Age":21}
2、控制器Action方法中通过Request["Name"]的方式获取数据

在Home/Index.cshtml视图中,使用jQuery发送异步Get请求。

@{
    ViewBag.Title = "Index";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

<h2>Index</h2>


<div id="result"></div>

@section scripts
{
    <script type="text/javascript">
        $(function() {
            $.ajax({
                type: 'GET',
                url: '@Url.Action("GetInfo","Home")',
                data: { "Name":"Darren","Age":21},
                datatype: 'html',
                success:function(data) {
                    $('#result').html(data);
                }
            });
        });
    </script>
}


在HomeController中通过Request["Name"]的方式获取数据。

   public class HomeController : Controller
    {

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

        public ActionResult GetInfo()
        {
            //从表单中获取的数据
            var person = new Person();
            person.Name = Request["Name"];
            person.Age = int.Parse(Request["Age"]);

            return PartialView("_DisplayJavaScriptObject", person);
        }
    }


Home/_DisplayJavaScriptObject.cshtml强类型视图展示数据。

@model MvcApplication1.Models.Person


<div>
    <h3>从表单中读出的数据</h3>
    <p><span>Name:</span><span>@Model.Name</span></p>
    <p><span>Age:</span><span>@Model.Age</span></p>
</div>

就这样。

总结ASP.NET MVC视图页使用jQuery传递异步数据的几种方式的更多相关文章

  1. 总结ASP.NET MVC Web Application中将数据显示到View中的几种方式

    当我们用ASP.NET MVC开发Web应用程序的时候,我们都是将需要呈现的数据通过"Controllers"传输到"View"当中,怎么去实现,下面我介绍一下 ...

  2. ASP.NET MVC 视图(一)

    ASP.NET MVC 视图(一) 前言 从本篇开始就进入到了MVC中的视图部分,在前面的一些篇幅中或多或少的对视图和视图中的一些对象的运用进行了描述,不过毕竟不是视图篇幅说的不全面,本篇首先为大家讲 ...

  3. 【ASP.NET MVC系列】浅谈ASP.NET MVC 视图

    ASP.NET MVC系列文章 [01]浅谈Google Chrome浏览器(理论篇) [02]浅谈Google Chrome浏览器(操作篇)(上) [03]浅谈Google Chrome浏览器(操作 ...

  4. 【ASP.NET MVC系列】浅谈ASP.NET MVC 视图与控制器传递数据

    ASP.NET MVC系列文章 [01]浅谈Google Chrome浏览器(理论篇) [02]浅谈Google Chrome浏览器(操作篇)(上) [03]浅谈Google Chrome浏览器(操作 ...

  5. (转)Asp.Net Mvc视图引擎Razor介绍

    Asp.Net Mvc视图引擎Razor介绍 1.Razor介绍 程序园原创,转载请注明:http://www.kwstu.com/ArticleView/dabaomvc_2014082408205 ...

  6. ASP.NET MVC 视图(五)

    ASP.NET MVC 视图(五) 前言 上篇讲解了视图中的分段概念.和分部视图的使用,本篇将会对Razor的基础语法简洁的说明一下,前面的很多篇幅中都有涉及到视图的调用,其中用了很多视图辅助器,也就 ...

  7. ASP.NET MVC 视图(四)

    ASP.NET MVC 视图(四) 前言 上篇对于利用IoC框架对视图的实现进行依赖注入,最后还简单的介绍一下自定义的视图辅助器是怎么定义和使用的,对于Razor语法的细节和辅助器的使用下篇会说讲到, ...

  8. ASP.NET MVC 视图(三)

    ASP.NET MVC 视图(三) 前言 上篇对于Razor视图引擎和视图的类型做了大概的讲解,想必大家对视图的本身也有所了解,本篇将利用IoC框架对视图的实现进行依赖注入,在此过程过会让大家更了解的 ...

  9. ASP.NET MVC 视图(二)

    ASP.NET MVC 视图(二) 前言 上篇中对于视图引擎只是做了简单的演示,对于真正的理解视图引擎的工作过程可能还有点模糊,本篇将会对由MVC框架提供给我们的Razor视图引擎的整个执行过程做一个 ...

随机推荐

  1. Linux信号(signal)机制【转】

    转自:http://gityuan.com/2015/12/20/signal/ 信号(signal)是一种软中断,信号机制是进程间通信的一种方式,采用异步通信方式 一.信号类型 Linux系统共定义 ...

  2. linux动态追踪神器——Strace实例介绍【转】

    Strace是Linux下一款通用的进程动态跟踪工具,用来追踪程序执行时的系统调用和所接收的信号.其应用方法如下图(部分). 首先,简单说说它的使用参数,Strace的参数包括输出参数.过滤参数.统计 ...

  3. Visual Studio 2012“完美的拥抱”Visual Studio Online

    看了Visual Studio 2012完美的拥抱GitHub 写的不错,不过,配置起来太麻烦.既然是使用VS编码,微软的东西嘛,当然还有更简单的,那就是Visual Studio Online.不用 ...

  4. 解决centos7下tomcat启动正常,无法访问项目的问题

    centos7防火墙不再采用iptables命令,改用firewalld 禁用防火墙命令: # systemctl stop firewalld.service # systemctl disable ...

  5. KVM -> 虚拟化简介&虚拟机安装_01

    什么是虚拟化? 在计算机技术中,虚拟化(技术)或虚拟技术(英语:Virtualization)是一种资源管理技术,是将计算机的各种实体资源(CPU.内存.磁盘空间.网络适配器等),予以抽象.转换后呈现 ...

  6. 更改jupyter notebook的主题颜色(theme) 包括pycharm

    https://blog.csdn.net/Techmonster/article/details/73382535

  7. Ueditor结合七牛云存储上传图片、附件和图片在线管理的实现和最新更新

    最新下载地址: https://github.com/widuu/qiniu_ueditor_1.4.3 Ueditor七牛云存储版本 注意事项 老版本请查看 : https://github.com ...

  8. html屏幕旋转事件监听

    近期做微信服务号开发,在做图片展示的时候需要横竖屏的检测实现图片大小不同的展示. 添加屏幕旋转事件侦听,可随时发现屏幕旋转状态(左旋.右旋还是没旋). 摘自:http://bbs.phonegap10 ...

  9. 【LOJ】#2525. 「HAOI2018」字串覆盖

    题解 写后缀树真是一写就好久,然后调好久QAQ 我们把两个串取反拼一起建后缀树,这样的话使得后缀树是正串的后缀树 然后我们把询问挂在每个节点上,每次线段树合并,对于大于50的每次暴力跳着在线段树找,对 ...

  10. Django -- settings 详解(转)

    Django -- settings 详解   Django settings详解 1.基础 DJANGO_SETTING_MODULE环境变量:让settings模块被包含到python可以找到的目 ...