目录

介绍

例子

添加搜索模型

修改Home控制器

修改Home视图


介绍

应用程序中需要的一个常见场景是针对某个搜索值搜索数据模型。由于http协议的性质(无状态):

  1. 搜索结果的提交将再次呈现页面。
  2. 输入的搜索表达式将丢失。

这个问题的一个常见解决方案是使用jquery创建一个异步http请求来重绘将保存搜索结果的部分。

例子

1. 在Visual Studio 2019中创建一个新的ASP.NET MVC Core应用程序,如下所示:

2.在models文件夹下添加一个名为ShopInfoModel的模型,在model中放置如下代码

 public class ShopInfoModel
{public int ID { get; set; }public string Name { get; set; }public string Address { get; set; }public int Pincode { get; set; }}

3.在控制器文件夹中用下面的代码替换Home控制器的代码

 public class HomeController : Controller{public HomeController(){}public IActionResult IndexDisplaySearchWithAjaxRequest(){return View();}public IActionResult Index(){return View(new ShopInfoSearchModel { shops = new List<ShopInfoModel>() });}[HttpGet]public IActionResult Search(string name){/*For simplicity this is a dummy list for test*/List<ShopInfoModel> shops = new List<ShopInfoModel>{new ShopInfoModel{Name="Model1",Pincode=1},new ShopInfoModel{Name="Model2",Pincode=2},};shops = shops.Where(w => w.Name.Contains(name)).ToList();return Json(shops);}[HttpPost]public IActionResult Search(ShopInfoSearchModel searchModel){/*For simplicity this is a dummy list for test*/List<ShopInfoModel> shops = new List<ShopInfoModel>{new ShopInfoModel{Name="Model1",Pincode=1},new ShopInfoModel{Name="Model2",Pincode=2},}; searchModel.shops = shops.Where(w => w.Name.Contains(searchModel.SearchText)).ToList();return View("Index", searchModel);}}...

4. 在views\home文件夹下添加一个名为IndexDisplaySearchWithAjaxRequest的视图。在视图中放置如下代码如下

@{ViewData["Title"] = "Home Page";
}<table><tr><td><input type="text" id="txtsearch" /></td><td><button type="button" id="btnsearch">Search</button></td></tr></table>@section Scripts
{
<script>$(document).ready(function () {$("#btnsearch").click(function(){$.ajax({url: '@Url.Action("Search", "Home")',data: { "name": $("#txtsearch").val()},success: function (data){var table = $("<table />");for (var i = 0; i < data.length; i++) {var row = $('<tr><td>' + data[i].name+ '</td><td>' + data[i].address + '</td><td>' + data[i].pincode + '</td></tr>');//--->foreach column we will add a concat operation <---$('table').append(row);}}});})})
</script>
}...

5.运行应用程序,在地址中的URL中添加Home/IndexDisplaySearchWithAjaxRequest并回车。

现在我们来到文章的核心。本文中的解决方案提出了一种服务器端方法(即,将结果绝对从控制器返回到视图)。这将减少执行以下操作所需的时间:

  1. 通过在jquery中创建一个string来创建表行,它包含表行和行单元格
  2. 对每个表格单元格重复一次concat操作

如上面第4步所示

添加搜索模型

  1. 在模型文件夹下添加一个新模型。将其命名为ShopInfoSearchModel.cs
  2. 在类中添加以下代码
//public class ShopInfoSearchModel{//this model is bound to the view containing the search form public List<ShopInfoModel> shops { get; set; }//list of search result reocrdspublic string SearchText { get; set; }}
}...

修改Home控制器

1、在模型文件夹下添加一个新模型。将其命名为ShopInfoSearchModel.cs

将home控制器中index方法的代码替换为以下代码

public IActionResult Index()
{return View(new ShopInfoSearchModel { shops = new List<ShopInfoModel>() });
}...

2、在Home控制器中添加以下方法

 [HttpPost]public IActionResult Search(ShopInfoSearchModel searchModel){/*For simplicity this is a dummy list for test*/List<ShopInfoModel> shops = new List<ShopInfoModel>{new ShopInfoModel{Name="Model1",Pincode=1},new ShopInfoModel{Name="Model2",Pincode=2},};searchModel.shops = shops.Where(w => w.Name.Contains(searchModel.SearchText)).ToList();return View("Index", searchModel);}
}
...

修改Home视图

home/index.cshtm中的代码替换为以下内容

@{ViewData["Title"] = "Home Page";
}@using (Html.BeginForm("Search", "Home", FormMethod.Post))
{<table><tr><td>@Html.TextBoxFor(f => f.SearchText)</td><td><button type="submit">Search</button></td></tr>@foreach (var item in Model.shops){<tr><td>@Html.DisplayFor(modelItem => item.ID)</td><td>@Html.DisplayFor(modelItem => item.Name)</td><td>@Html.DisplayFor(modelItem => item.Address)</td><td>@Html.DisplayFor(modelItem => item.Pincode)</td></tr>}</table>}...

运行应用程序时,将通过单击搜索按钮执行对模型的搜索,并将给出与ajax请求方法相同的结果

https://www.codeproject.com/Tips/5303793/Server-Side-Approach-for-Executing-Common-Search-S

在Web应用程序中执行常见搜索场景的服务器端方法相关推荐

  1. web csrf java_在Java Web应用程序中阻止CSRF

    web csrf java 跨站点请求伪造攻击(CSRF)在Web应用程序中非常常见,如果允许,可能会造成重大危害. 如果您从未听说过CSRF,建议您查看有关它的OWASP页面 . 幸运的是,阻止CS ...

  2. 在Java Web应用程序中阻止CSRF

    跨站点请求伪造攻击(CSRF)在Web应用程序中非常常见,如果允许,可能会造成重大危害. 如果您从未听说过CSRF,建议您查看有关它的OWASP页面 . 幸运的是,阻止CSRF攻击非常简单,我将向您展 ...

  3. gettext 国际化_如何使用Gettext在Phoenix应用程序中执行本地化

    gettext 国际化 by Anastasia 由Anastasia 如何使用Gettext在Phoenix应用程序中执行本地化 (How to perform localization in Ph ...

  4. php进攻教程,如何对PHP程序中的常见漏洞进行攻击(下)_php基

    如何对PHP程序中的常见漏洞进行攻击(下)_php基 发布时间:2016-06-17 来源: 点击: 次 如何对PHP程序中的常见漏洞进行攻击(下) 翻译:analysist(分析家) 来源:http ...

  5. 如何对PHP程序中的常见漏洞进行攻击(上)

    如何对PHP程序中的常见漏洞进行攻击(上) 创建时间:2001-07-17 文章属性:翻译 文章来源:http://www.china4lert.org 文章提交:analysist (analysi ...

  6. DotNetCore Web应用程序中的Cookie管理

    原文来自互联网,由长沙DotNET技术社区编译.如译文侵犯您的署名权或版权,请联系小编,小编将在24小时内删除.限于译者的能力有限,个别语句翻译略显生硬,还请见谅. 作者简介:Jon(Jonathan ...

  7. java程序示例_Java程序中的Google搜索示例

    java程序示例 Sometime back I was looking for a way to search Google using Java Program. I was surprised ...

  8. DotNetCore Web应用程序中的Session管理

    原文来自互联网,由长沙DotNET技术社区编译.如译文侵犯您的署名权或版权,请联系小编,小编将在24小时内删除.限于译者的能力有限,个别语句翻译略显生硬,还请见谅. 作者简介:Jon(Jonathan ...

  9. Spring Security并发会话控制示例教程–如何限制Java JEE Web应用程序中的用户会话数...

    如果您不知道, Spring安全性可能会限制用户可以拥有的会话数. 如果要开发Web应用程序,尤其是Java JEE中的安全Web应用程序 ,则必须提出与在线银行门户相似的要求,例如, 每个用户一次只 ...

最新文章

  1. Python图像处理:图像腐蚀与图像膨胀
  2. 6 个核心理念!诠释了吴恩达新书《Machine Learning Yearning》
  3. 如何修改移动设备按钮默认样式
  4. xfce4面板消失了解决方案+xfce4的面板保存设置以及读取
  5. 如何判断SVG事件对象中的鼠标来源?
  6. 闪存必须解决的三大问题
  7. 抓包工具Stream之接口调试和加密解码(二)
  8. 【连载】如何掌握openGauss数据库核心技术?秘诀二:拿捏执行器技术(2)
  9. xcode5+未能安装到模拟器
  10. Needle in a haystack: efficient storage of billions of photos 【转】
  11. springcloud中文手册API
  12. mobi 直接转化为 html,MobiCreator--pdf文档转化为kindle可阅读的格式
  13. 着眼产业合作、情报分享 网易云易盾加入云清联盟
  14. 查询央行征信的APP有哪些?
  15. Jenkins从下载到部署项目的流程
  16. 纸壳cms支持php坏境吗,如何参与纸壳CMS开发以及贡献代码
  17. (源代码)最优控制与姿控喷流在导弹姿态控制中的应用
  18. 服务器网站搭建入门教程
  19. scipy.misc.imresize的替换方案
  20. python识图自动化_Python自动化测试-验证识别

热门文章

  1. 查看usb控制器固件日期_三星发布两款USB Type-C电源控制器芯片 支持100W的充电功率...
  2. MySQL 集群 3副本,Kubernetes经典实践——运行MySQL多副本集群
  3. linux查分自动备份tar,linux 下tar的增量备份
  4. tomcat 查看当前请求数_原生线程池这么强大,Tomcat 为何还需扩展线程池?
  5. 网站数据是怎么存取在mysql_数据是怎么存储在mysql?
  6. java 线程百科_Java并发——线程介绍
  7. mysql 自定义函数 事务_MySQL存储过程、触发器、自定义函数、事务
  8. 我要3万取款机怎么取_自助取款机一天可以取多少,能取出来几万呢?
  9. 关于音乐中气息的练习
  10. Linux内核 eBPF:Hacking Linux USDT with Ftrace