zoukankan      html  css  js  c++  java
  • ASP.NET MVC实践系列5结合jQuery

    现在做web开发肯定都听说过jQuery,jQuery在ASP.NET MVC被支持的很好,而且据说vs2010中也会集成进去,所以使用ASP.NET MVC了解jQuery肯定有莫大的好处,所以这里利用几个简单的例子来讲解一下jQuery在ASP.NET MVC的中应用。

    一、jQuery的引用

    对于一个新的ASP.NET MVC项目来说在它的scripts文件夹下已经包含了jQuery的js文件,所以我们在项目中直接引用就可以了,我们可以在View中输入如下代码:


    <head runat="server">
    <script src="<%= Url.Content("~/Scripts/jquery-1.3.2.min.js") %>"
    type=
    "text/javascript"></script>
    </head>

    这里的min版本去除了空格,注释,改写了长文件名,下载的时候所用过的时间更少。

    在Vs中使用jQuery有一个比较大的好处是可以利用智能感知,jQuery的团队和微软的团队共同开发了一个js文件用于在vs中的jQuery可以智能感知,但需要在View中输入


    <% /* %><script src="~/Scripts/jquery-1.3.2-vsdoc.js"></script><% */ %>

    不过我测试这个的时候发现如果在具体的View中使用了这个引用会影响在View中代码的智能感知,但如果放在mastpage中就没什么问题了。

    二、jQuery中使用Ajax方式:

    1、jQuery.get(url, [data], [callback], [type])

    urlString:待载入页面的URL地址

    data (可选)Map:待发送 Key/value 参数,在服务器端可以用Request获得。

    callback (可选)Function:载入成功时回调函数。

    type (可选)String:返回内容格式,xml, html, script, json, text, _default。

    我们现在要做一个对列表进行查询的ajax请求,前端视图为:



        
    <script src="<%= Url.Content("~/Scripts/jquery-1.3.2.min.js") %>" type="text/javascript"></script>

        
    <%=Html.TextBox("search"%>
        
    <input type="button" value="查询" id="btnSearch" />
        <div id="results">
            
    <%Html.RenderPartial("NewsListPartial", Model); %>
        
    </div>

        
    <script language="javascript" type="text/javascript">
            $(
    "#btnSearch").click(function() {
            $.get($(
    this).attr("href"), { title: $("#search").attr("value") }, function(response) {
                    $(
    "#results").html(response);
                })

            });
        
    </script>

    NewsListPartial.ascx中的内容为:


    <%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<IEnumerable<News>>" %>

        
    <table>
            
    <tr>
               
                
    <th>
                    Author
                
    </th>
                
    <th>
                    Title
                
    </th>
                
    <th>
                    CreateTime
                
    </th>
            
    </tr>

        
    <% foreach (var item in Model) { %>
        
            
    <tr>
           
                
    <td>
                    
    <%= Html.Encode(item.Author) %>
                
    </td>
                
    <td>
                    
    <%= Html.Encode(item.Title) %>
                
    </td>
                
    <td>
                    
    <%= Html.Encode(String.Format("{0:g}", item.CreateTime)) %>
                
    </td>
            
    </tr>
        
        
    <% } %>

        
    </table>

    Controller为:


    public ActionResult GetDemo(string title)
            {
                List
    <News> news=ListNews.GetList();
                
    if (Request.IsAjaxRequest())
                {
                    
    return View("NewsListPartial",news.Where(p => p.Title.Contains(title)));
                }
                
    return View(news);
            }

    我们重点来解释一下这句:

    $.get($(this).attr("href"), { title: $("#search").attr("value") }, function(response) {
                    $("#results").html(response);
                })

    $(this).attr("href"):获得当前链接

    { title: $("#search").attr("value") }:调用url时传递的参数,这个参数就是TextBox的值。

    function(response) {
                    $("#results").html(response);
                }:当ajax请求完之后会调用这个函数,这个函数会将id=results的div替换成返回的文本内容。

    2、jQuery.post(url, [data], [callback], [type]) 的用法和get的用法很相似

    略(见源码)

    3、jQuery.getJSON(url, [data], [callback]) :通过 HTTP GET 请求载入 JSON 数据。
    View:


        <%=Html.TextBox("NewsId"%>
        
    <input type="button" id="btnGet" value="获得新闻" />
        
    <table>
            
    <tr>
                
    <td>
                    ID:
                
    </td>
                
    <td id="ID">
                
    </td>
            
    </tr>
            
    <tr>
                
    <td>
                    作者:
                
    </td>
                
    <td id="Author">
                
    </td>
            
    </tr>
            
    <tr>
                
    <td>
                    标题:
                
    </td>
                
    <td id="Title">
                
    </td>
            
    </tr>
       
        
    </table>

        
    <script language="javascript" type="text/javascript">
            $(
    "#btnGet").click(function() {
            $.getJSON($(
    this).attr("action"), { newsID: $("#NewsId").attr("value") }, function(news) {
                    $(
    "#ID").html(news.ID);
                    $(
    "#Author").html(news.Author);
                    $(
    "#Title").html(news.Title);
                })
            })
        
    </script>

    Controller:


    public ActionResult JosnDemo(string newsID)
            {
                
    if (Request.IsAjaxRequest())
                {
                    
    return new JsonResult
                    {
                        Data 
    = ListNews.GetList().First(p => p.ID.ToString() == newsID)
                    };
                }
                
    else
                    
    return View();
            }

    4、load(url, [data], [callback]) :载入远程 HTML 文件代码并插入至 DOM 中。

    下例中当DropDownList改变时,根据DropDownList中的内容改变列表

    View:


    <h2>
            NewsList
    </h2>
        
    <%=Html.DropDownList("Author"%>
        
    <div id="results">
            
    <%Html.RenderPartial("NewsListPartial", Model); %>
        
    </div>
        
    <script language="javascript" type="text/javascript">

            $(
    "#Author").change(function() {
                var selection 
    = $("#Author").val();
                $(
    "#results").load($(this).attr("href"), { author: selection });
            })
        
    </script>

    Controller:


    public ActionResult NewsList(string author)
            {
                
                List
    <News> news=ListNews.GetList();
                
    if (Request.IsAjaxRequest())
                {
                    
    if (!string.IsNullOrEmpty(author))
                    {
                        news 
    = news.Where(p => p.Author == author).ToList();
                    }
                    
    return View("NewsListPartial", news);
                }
                
    else
                {
                    List
    <object> list = new List<object>();
                    list.Add(
    new { author = "全部", value = "" });
                    list.Add(
    new { author = "lfm1", value = "lfm1" });
                    list.Add(
    new { author = "lfm2", value = "lfm2" });
                    list.Add(
    new { author = "lfm3", value = "lfm3" });
                    
                    ViewData[
    "Author"= new SelectList(list, "value""author");
                    
    return View(news);
                }
            }

    三、参考:

    《pro_asp_dot_net_mvc_framework》

    《Professional ASP.NET MVC 1.0》

    四、源码下载


    作者:Lance
    出处:http://www.cnblogs.com/nuaalfm/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    31天重构学习笔记9. 提取接口
    31天重构学习笔记4. 降低方法
    31天重构学习笔记8. 使用委派代替继承
    31天重构学习笔记11. 使用策略类
    31天重构学习笔记12. 分解依赖
    MyCat:第八章:MyCAT In Action中文版
    HDU 2041 超级楼梯
    CSU 1487 未覆盖顶点数量
    HDU 1712 ACboy needs your help
    HDU 2034 人见人爱AB
  • 原文地址:https://www.cnblogs.com/nuaalfm/p/1595411.html
Copyright © 2011-2022 走看看