在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. struct termios结构体详解

    一.数据成员 termios 函数族提供了一个常规的终端接口,用于控制非同步通信端口. 这个结构包含了至少下列成员:tcflag_t c_iflag;      /* 输入模式 */tcflag_t ...

  2. WPF为stackpanel设置滚动条

    最新遇到ItemControl控件增加滚动条功能,找半天还是在StackPanel模板外添加的. <ScrollViewer x:Name="scrolls" Vertica ...

  3. ckeditor:基本使用方法

    引用网址:http://blog.sina.com.cn/s/blog_6961ba9b0102wwye.html 1.获得值 var editor=CKEDITOR.replace( 'editor ...

  4. mysql 当前时间

    1.  mysql 获取当前时间 select now() ,current_timestamp(),localtimestamp(),sysdate() ,curdate(),curtime(),u ...

  5. 使用Eclipse运行第一个Go程序

    Windows 10家庭中文版,go version go1.11 windows/amd64, Eclipse IDE for C/C++ Developers Photon Release (4. ...

  6. findHomography和perspectiveTransform

    opencv中的两个函数,之前一直不明白这俩函数到底是要干嘛的. 得到两帧图像中的特征点后,就可以用findHomography得到单应性矩阵. 得到单应性矩阵后,可以 (1)根据相应的计算方法,由前 ...

  7. thinkphp AOP(面向切面编程)

    AOP: 在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术.AOP是OOP的延续,是软 ...

  8. element-ui 日期选择范围限制,只允许选择上下浮动一个月内的日期

    <el-date-picker class="filter-item" type="daterange" value-format="yyyy- ...

  9. 【AtCoder】ARC086

    C - Not so Diverse 题解 选出现次数K多的出来,剩下的都删除即可 代码 #include <bits/stdc++.h> #define fi first #define ...

  10. 【LOJ】#2531. 「CQOI2018」破解 D-H 协议

    题解 BSGS直接解出a和b来即可 代码 #include <bits/stdc++.h> #define fi first #define se second #define pii p ...