ASP.NET MVC页面搜索功能实现(普通方法和使用Ajax)

使用以下方法可以对数据进行过滤再在页面中显示

  1. 假设当前数据库、控制器和视图都已创建
  2. 模型名为Movies
  3. 控制名为MoviesController
  4. 显示页面的视图名为Index
  5. 数据库上下文为MovieDBContext

一、     在显示页面添加搜索功能(普通)

1、         在显示页面的视图中(即Index.cshtml)加入一个搜索表单

@using (Html.BeginForm("Index", "Movies", FormMethod.Get))

    {

        <p>

            Genre:@Html.DropDownList("movieGenre", "All")

            Title:@Html.TextBox("SearchString")

            &nbsp;&nbsp;

            <input type="submit" value="Filter" />

        </p>

}

//表单为一个下拉菜单,一个输入框;当有值输入并点击Filter时,会使用上面Html.BeginForm()中写定的控制器和方法,一般是当前视图的控制器方法;

2、         在对应的控制器方法中,加入两个表单的参数

private MovieDBContext db = new MovieDBContext();
public ActionResult Index(String movieGenre, String searchString)
{
/*获取Movie表中的’电影类型’数据,并将其封装在ViewBag中,给视图中的下拉列表使用*/
            var genreList = new List<String>();
            var genreQry = from d in db.Movies
                           orderby d.Genre
                           select d.Genre;
            genreList.AddRange(genreQry.Distinct());
            ViewBag.movieGenre = new SelectList(genreList);

//获取Movie表中全部数据
            var movies = from m in db.Movies
                        select m;

//判断参数是否有值,第一次请求参数是空的,所以就显示全部数据;当执行搜索后,表单会把两个参数传过来,就可以对数据过滤了;
            if (!String.IsNullOrEmpty(searchString)){
                movies = movies.Where(s => s.Title.Contains(searchString));
            }

            if (!String.IsNullOrEmpty(movieGenre))
            {
                movies = movies.Where(x => x.Genre == movieGenre);
            }

//将封装好的数据传给视图
            return View(movies);
        }

二、     在显示页面添加搜索功能(使用Ajax)

1、                  首先在 工具->Nuget包管理器->管理解决方案的Nuget程序包->浏览,安装”Microsoft.jquery.Unobtrusive.Ajax”包;

2、                  在项目资源->App_Start-> BundleConfig.cs, RegisterBundles(BundleCollection bundles)方法中,新添加一个bundles(可以把多个脚本文件绑定在一起)

public static void RegisterBundles(BundleCollection bundles)
{
     bundles.Add(new ScriptBundle("~/bundles/moviesScripts").Include
                "~/Scripts/jquery-{version}.js",
                "~/Scripts/jquery.validate*",
                "~/Scripts/modernizr-*",
                "~/Scripts/jquery.unobtrusive*"
                ));
//其中"~/bundles/moviesScripts"为这些脚本的别名,以后只需要在布局页或者视图中引用这个别名,就相当于引用了这些脚本

3、                  在显示页面的视图布局页中引用bundles,布局页默认为 Views->Shared->_Layout.cshtml,在布局页面的下方编写@Scripts.Render("~/bundles/moviesScripts")

4、                  在显示页面的视图中加入Ajax搜索表单

@using (Ajax.BeginForm(new AjaxOptions
{
    HttpMethod = "get",                    //使用get方法请求
    InsertionMode = InsertionMode.Replace, //将过滤的数据覆盖原数据
    UpdateTargetId = "moviesList"          //覆盖的地方(值为标签ID)
 }))
{
   <input type="search" name="searchString" />
   <input type="submit" name="Filter" />
}

@Html.Partial("_Movies", Model)               /*引用分部视图,第一个值
                                              为分部视图名,第二个值是
                                              把model传过去*/

5、                  新建一个view,新建时勾选”创建为分部视图”,而后将显示页面的视图中所有显示数据的标签和代码剪切到新建的分部视图中,注意要把model引用进来,注意要把显示数据的标签和代码包含在覆盖指定ID下

@model IEnumerable<MyFristASP.Models.Movie>

<div id="moviesList">             //执行搜索时该ID包含的区域会被覆盖

    <table class="table">

        <tr>

            <th>

                @Html.DisplayNameFor(model => model.Title)

······
</div>

//之所以要使用分部视图,是因为若是不使用,执行搜索后回返回整个页面,然后这整个页面又会覆盖在指定的标签内

6、                  同样,使用Ajax搜索,在控制器对应的方法中也要同上添加搜索参数,还要在方法内加以判断是否为Ajax请求,若是则返回过滤后的数据和部分页面,若不是则显示全部

 //如果是Ajax请求就返回部分网页
 if (Request.IsAjaxRequest())
 {
     //第一个值为分部视图名,第二个值为封装好的数据
     return PartialView("_Movies",movies);
 }
 //如果不是Ajax则显示完整页面
 return View(movies);
时间: 2024-10-09 14:47:18

ASP.NET MVC页面搜索功能实现(普通方法和使用Ajax)的相关文章

Asp.Net MVC页面静态化功能实现二:用递归算法来实现

上一篇提到采用IHttpModule来实现当用户访问网站的时候,通过重新定义Response.Filter来实现将返回给客户端的html代码保存,以便用户下一次访问是直接访问静态页面. Asp.Net MVC页面静态化功能实现一:利用IHttpModule,摒弃ResultFilter 后来想到可以通过WebRequest获取html代码,然后采用递归算法来实现.基本实现思路如下: 通过WebRequest获取超链接地址返回的html代码,并保存:通过正则表达式匹配html代码中所有的超链接hr

Asp.Net MVC 页面代码压缩筛选器-自定义删除无效内容

Asp.Net MVC 页面代码压缩筛选器 首先定义以下筛选器,用于代码压缩. /*页面压缩 筛选器*/ public class WhiteSpaceFilter : Stream { private Stream _shrink; private Func<string, string> _filter; public WhiteSpaceFilter(Stream shrink, Func<string, string> filter) { _shrink = shrink;

ASP.NET MVC页面报错System.InvalidOperationException The view found at &#39;~/Views/Home/Index.cshtml&#39; was not created.

Application Exception System.InvalidOperationException The view found at '~/Views/Home/Index.cshtml' was not created. Description: HTTP 500.Error processing request. Details: Non-web exception. Exception origin (name of application or object): System

asp.net mvc 页面内容呈现Html.Raw HtmlString

asp.net mvc 页面内容呈现Html.Raw Html.Raw内容经过页面呈现,不呈现Html标签 @Html.Raw( File.ReadAllText(Server.MapPath("~/Content/html/about.html"))) HtmlString内容不经过页面处理呈现,原样呈现,含Html标签 @(File.ReadAllText(Server.MapPath("~/Content/html/about.html"))) 或 @( ne

ASP.NET MVC 5 - 查询Details和Delete方法

原文:ASP.NET MVC 5 - 查询Details和Delete方法 在这部分教程中,接下来我们将讨论自动生成的Details和Delete方法. 查询Details和Delete方法 打开Movie控制器并查看Details方法. public ActionResult Details(int? id) { if (id == null) { return new HttpStatusCodeResult(HttpStatusCode.BadRequest); } Movie movie

[转]ASP.NET MVC 5 - 查询Details和Delete方法

在这部分教程中,接下来我们将讨论自动生成的Details和Delete方法. 查询Details和Delete方法 打开Movie控制器并查看Details方法. public ActionResult Details(int? id) { if (id == null) { return new HttpStatusCodeResult(HttpStatusCode.BadRequest); } Movie movie = db.Movies.Find(id); if (movie == nu

ASP.NET MVC 页面重定向

在asp.net中页面重定向:Server.Execute("m2.aspx"); 服务器保存此页转向前的数据后,使页面转向到m2.aspx执行, 再返回本页继续执行.再将三者结果合并后返回给浏览器. 以上都是服务器端页面转向所以浏览器不出现页更改记录(显示的地址不会改变).因此,如果用户刷新此页,也许会出现一些其它意外情况. 此类页转向,可完成一些其它功能,比如访问到前一页面中的服务端控件. 3.Response.Redirect: 当浏览器请求aspx页面时,碰到Redirect(

在ASP.NET MVC中使用jQuery的Load方法加载静态页面的一个注意点

使用使用jQuery的Load方法可以加载静态页面,本篇就在ASP.NET MVC下实现. Model先行: public class Article { public int Id { get; set; } public string Url { get; set; } } 在HomeController中的Index方法,向视图传递一个Article强类型. public class HomeController : Controller { public ActionResult Ind

ASP.NET MVC 页面调整并传递参数

转自:http://blog.csdn.net/zhensoft163/article/details/7174661 使用过ASP.NET MVC的人都知道在MVC中页面后台中常用的页面跳转方法有几种,如:return View().return RedirectToAction() 一般情况下我们返回的都是本页面,所以使用return View()就可以解决问题了,但是很多时候我们也会遇到返回的页面不是本页面的,那么就会用到后面两种,但是如果我们在页面返回的时候也要返回操作的结果的时候,我们