在Web应用程序中执行常见搜索场景的服务器端方法
目录
介绍
例子
添加搜索模型
修改Home控制器
修改Home视图
介绍
应用程序中需要的一个常见场景是针对某个搜索值搜索数据模型。由于http协议的性质(无状态):
- 搜索结果的提交将再次呈现页面。
- 输入的搜索表达式将丢失。
这个问题的一个常见解决方案是使用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并回车。
现在我们来到文章的核心。本文中的解决方案提出了一种服务器端方法(即,将结果绝对从控制器返回到视图)。这将减少执行以下操作所需的时间:
- 通过在jquery中创建一个string来创建表行,它包含表行和行单元格
- 对每个表格单元格重复一次concat操作
如上面第4步所示
添加搜索模型
- 在模型文件夹下添加一个新模型。将其命名为ShopInfoSearchModel.cs
- 在类中添加以下代码
//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应用程序中执行常见搜索场景的服务器端方法相关推荐
- web csrf java_在Java Web应用程序中阻止CSRF
web csrf java 跨站点请求伪造攻击(CSRF)在Web应用程序中非常常见,如果允许,可能会造成重大危害. 如果您从未听说过CSRF,建议您查看有关它的OWASP页面 . 幸运的是,阻止CS ...
- 在Java Web应用程序中阻止CSRF
跨站点请求伪造攻击(CSRF)在Web应用程序中非常常见,如果允许,可能会造成重大危害. 如果您从未听说过CSRF,建议您查看有关它的OWASP页面 . 幸运的是,阻止CSRF攻击非常简单,我将向您展 ...
- gettext 国际化_如何使用Gettext在Phoenix应用程序中执行本地化
gettext 国际化 by Anastasia 由Anastasia 如何使用Gettext在Phoenix应用程序中执行本地化 (How to perform localization in Ph ...
- php进攻教程,如何对PHP程序中的常见漏洞进行攻击(下)_php基
如何对PHP程序中的常见漏洞进行攻击(下)_php基 发布时间:2016-06-17 来源: 点击: 次 如何对PHP程序中的常见漏洞进行攻击(下) 翻译:analysist(分析家) 来源:http ...
- 如何对PHP程序中的常见漏洞进行攻击(上)
如何对PHP程序中的常见漏洞进行攻击(上) 创建时间:2001-07-17 文章属性:翻译 文章来源:http://www.china4lert.org 文章提交:analysist (analysi ...
- DotNetCore Web应用程序中的Cookie管理
原文来自互联网,由长沙DotNET技术社区编译.如译文侵犯您的署名权或版权,请联系小编,小编将在24小时内删除.限于译者的能力有限,个别语句翻译略显生硬,还请见谅. 作者简介:Jon(Jonathan ...
- java程序示例_Java程序中的Google搜索示例
java程序示例 Sometime back I was looking for a way to search Google using Java Program. I was surprised ...
- DotNetCore Web应用程序中的Session管理
原文来自互联网,由长沙DotNET技术社区编译.如译文侵犯您的署名权或版权,请联系小编,小编将在24小时内删除.限于译者的能力有限,个别语句翻译略显生硬,还请见谅. 作者简介:Jon(Jonathan ...
- Spring Security并发会话控制示例教程–如何限制Java JEE Web应用程序中的用户会话数...
如果您不知道, Spring安全性可能会限制用户可以拥有的会话数. 如果要开发Web应用程序,尤其是Java JEE中的安全Web应用程序 ,则必须提出与在线银行门户相似的要求,例如, 每个用户一次只 ...
最新文章
- Python图像处理:图像腐蚀与图像膨胀
- 6 个核心理念!诠释了吴恩达新书《Machine Learning Yearning》
- 如何修改移动设备按钮默认样式
- xfce4面板消失了解决方案+xfce4的面板保存设置以及读取
- 如何判断SVG事件对象中的鼠标来源?
- 闪存必须解决的三大问题
- 抓包工具Stream之接口调试和加密解码(二)
- 【连载】如何掌握openGauss数据库核心技术?秘诀二:拿捏执行器技术(2)
- xcode5+未能安装到模拟器
- Needle in a haystack: efficient storage of billions of photos 【转】
- springcloud中文手册API
- mobi 直接转化为 html,MobiCreator--pdf文档转化为kindle可阅读的格式
- 着眼产业合作、情报分享 网易云易盾加入云清联盟
- 查询央行征信的APP有哪些?
- Jenkins从下载到部署项目的流程
- 纸壳cms支持php坏境吗,如何参与纸壳CMS开发以及贡献代码
- (源代码)最优控制与姿控喷流在导弹姿态控制中的应用
- 服务器网站搭建入门教程
- scipy.misc.imresize的替换方案
- python识图自动化_Python自动化测试-验证识别
热门文章
- 查看usb控制器固件日期_三星发布两款USB Type-C电源控制器芯片 支持100W的充电功率...
- MySQL 集群 3副本,Kubernetes经典实践——运行MySQL多副本集群
- linux查分自动备份tar,linux 下tar的增量备份
- tomcat 查看当前请求数_原生线程池这么强大,Tomcat 为何还需扩展线程池?
- 网站数据是怎么存取在mysql_数据是怎么存储在mysql?
- java 线程百科_Java并发——线程介绍
- mysql 自定义函数 事务_MySQL存储过程、触发器、自定义函数、事务
- 我要3万取款机怎么取_自助取款机一天可以取多少,能取出来几万呢?
- 关于音乐中气息的练习
- Linux内核 eBPF:Hacking Linux USDT with Ftrace