天天看点

.net mvc使用jquery ajax

最近学习.net mvc,特此记录一下jquery在其中的用法;

     通过简单的例子来说明一下ajax请求在.net MVC中的使用。

     首先明确一下目的:网页中有两个输入框,当监听到输入框有输入动作时,ajax请求后台查询相应数据,然后显示响应数据。

下面开始动手:

一、项目准备

    1、新建asp.net mvc新项目;ps: 本人环境:vs2013

    2、将jQuery文件拷贝到Content目录下;

二、服务器端

    1、HomeController中新建方法:AjaxResponseTest(),用来显示视图。代码如下:

public ActionResult AjaxResponseTest()
        {
            return PartialView();
        }
           

    2、HomeController中新建QueryByYm方法,用来响应Ajax请求。代码如下:

public ActionResult QueryByYm()
        {
            // Json(queryRst.ToList(), JsonRequestBehavior.AllowGet);
            return Content(DateTime.Now.ToString());
        }
           

    这里并没有什么动态处理,如果要获得参数,可直接使用 Request.QueryString["y"] 来获得,然后查询数据库或者进行其它操作,再返回需要的结果即可。

    如果返回Json格式,可以使用Json方法,但注意,如果是Get请求,VS会报错,需要加入 JsonRequestBehavior.AllowGet参数。

三、前台

    1、Views/Home路径下新建AjaxResponseTest.cshtml,内容如下:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <script src="~/Content/themes/Jquery/jquery-1.4.1.min.js"></script>
    <script src="~/Content/js/AjaxMvcTest.js"></script>
    <title>AjaxMvcTest</title>
</head>
<body>
    <div id="queryKw">
        <label>年份:</label>
        <input id="iyear" name="queryInput" type="text" value="" autocomplete="off"><br />
        <label>月份:</label>
        <input id="iMonth" name="queryInput" type="text" value="" autocomplete="off">
    </div>
    <div id="response"><p></p></div>
</body>
</html>
           

    这个文件并没有用到Razor视图引擎,可以自己直接建并改好名称就行。注意jquery-1.4.1.min.js和AjaxMvcTest.js两个js文件的引用路径就好了。

    2、content目录中新建AjaxMvcTest.js文件,用来发送前台请求,内容如下:

$(document).ready(function(){
    $.each($("#queryKw [name=queryInput]"), function (idx, item) { jQuery(item).get(0).addEventListener("input", function (obj) { GetResponse(); }) });
});

function GetResponse()
{
    var y = $("#iyear").val();
    var m = $("#iMonth").val();
    $.ajax({
        url: 'QueryByYm',
        datatype: "json",
        data:
            {
                y: y,
                m:m
            },
        success: function (data)
        {
            $("#response p").html(data);
        },
        error: function () {
            alert("未知原因,加载失败!");
        }
    })
}
           

    上面第一行给相应的控件添加了监听事件,输入框有动作时调用GetResponse函数向后台发送请求。url即为控制器中的方法名称。data中是参数。获得响应后,将响应数据添加到页面相应的地方。

    好了,下面来参观一下成果:   

    在输入的时候,下面的日期会发生变化。效果如下:

.net mvc使用jquery ajax

    如果服务器端返回的是JSON格式的数据,使用 eval(data)来获得JSON对象,然后使用each方法循环遍历添加就好了。

可以将以下方法稍加改造:

    在html中添加:

<select id="userSelect"></select>
           

    然后修改QueryByYm()方法为:

public ActionResult QueryByYm()
        {
            List<SelectListItem> list = new List<SelectListItem> { 
            (new SelectListItem(){Text="op1", Value= "1"}),
            (new SelectListItem(){Text="op2", Value= "2"}),
            (new SelectListItem(){Text="op3", Value= "3"})
            };

            return Json(list.ToList(), JsonRequestBehavior.AllowGet);
            //return Content(DateTime.Now.ToString());
        }
           

    最后AjaxMvcTest.js的GetResponse()的success项中修改响应:

success: function (data)
        {
            // $("#reaponse p").html(data);
            var dataObj = eval(data);
            $.each(dataObj, function (idx, item) {
                $("#userSelect").append("<option value='" + item.Value + "'>" + item.Text + "</option>");
            });
        }
           

    当检测到输入之后,select选项就被加入,效果如下:

.net mvc使用jquery ajax

    到此,在ASP.NET中简单的jQuery ajax的使用就完成了。

继续阅读