ASP.NET MVC利用ActionLink实现动态组合查询
一个文件传输数据表,内有日期、传输协议、传输方向(上传或下载)、文件名等信息,完整的表内容显示如下:

现在需要分类查询,即按照协议和传输方向查询。单独的分类查询问题并不大,比如,按协议查询,在View中写出如下的代码:
@Html.ActionLink("Http","index1",new{protocol="Http"})
按传输方向查询,在View中写出如下代码:
@Html.ActionLink("Download","index1",new{direction="Download"})
以上两行代码都是通过QueryString的方式传输参数,产生的链接效果为:/log/index1?protocol=Http 和 /log/index1?direction=Download,后台在Controller的index1方法中解析相应的参数进行查询,就可以了。如下图:

如果现在是把上面的查询实现组合查询,比如查询Http协议中下载(Download)的记录,自然,要使用两个参数:/log/index1?protocol=Http&direction=Download这样的办法,在后台Controller中使用index1方法解析出两个参数完成查询,这样做并不困难。比较困难的是,这种组合查询如何在View中使用ActionLink构成呢?
比如:/log/index1?protocol=Http&direction=Download,可以考虑ActionLink获取Request.Url,然后在Request.Url的基础上,加入新的QueryString来完成,不过要想一下这样的问题:
/log/index1?protocol=Http&direction=Download 的意思是列出Http协议下载的记录,如果在这种结果的情况下,用户点击Upload,说明用户需要查询Http协议中上传的记录,那么,正常的查询字符串应该是这样:
/log/index1?protocol=Http&direction=Upload,
但如果利用ActionLink使用Request.Url后面添加查询字符串的方式完成,则会变成如下的结果:
/log/index1?protocol=Http&direction=Download&direction=Upload
这不是我们想要的构成方式。
解决办法是:在Controller中使用ViewBag记录protocol和direction两个参数的内容,在View中判断这两个参数是否为空,来构成组合查询的QueryString,具体代码为:
Controller中index1方法中的相应代码:
ViewBag.Protocol = Request.QueryString["protocol"];
ViewBag.Direction = Request.QueryString["direction"];
View中index1.cshtml相应代码
@using(Html.BeginForm()){
<fieldset>
<legend>查询条件</legend>
<p>
@Html.ActionLink("All", "index1", "Log")
</p>
<p>
@foreach (string p in ViewBag.ProtocolList) {
object objRoute;
if (string.IsNullOrEmpty(@ViewBag.Direction))
{
//如果传输方向参数为空,只构造协议的查询字符串
objRoute = new { protocol = p };
}
else
{
//如果原来的查询字符串中有传输方向参数,在查询字符串中保留该传输方向参数
objRoute = new { protocol = p, direction = @ViewBag.Direction };
}
@Html.ActionLink(p, "index1", objRoute)
<text> | </text>
}
</p>
<p>
@if(string.IsNullOrEmpty(@ViewBag.Protocol))
{
@Html.ActionLink("Download", "index1", new { direction = "Download"})
<text> | </text>
@Html.ActionLink("Upload", "index1", new{ direction = "Upload"})
}
else
{
@Html.ActionLink("Download", "index1", new { protocol = @ViewBag.Protocol, direction = "Download"})
<text> | </text>
@Html.ActionLink("Upload", "index1", new { protocol = @ViewBag.Protocol, direction = "Upload"})
}
</p>
</fieldset>
}
代码中ViewBag.ProtocolList是在Controller中制作的表中全部协议列表。
从View的代码可以看出,只有当点击“All”链接时,对应的是/log/index1页面,列出全部记录;单独点击协议或者传输方向,可以单独构成一个参数的QueryString,如果组合查询,由于在View中有查询字符串的判断,所以可以构成合理的组合查询字符串。View代码中,只对协议的查询字符串构成做了解释,传输方向查询字符串构成是同样原理。
ASP.NET MVC利用ActionLink实现动态组合查询的更多相关文章
- [ASP.NET MVC] 利用动态注入HTML的方式来设计复杂页面
原文:[ASP.NET MVC] 利用动态注入HTML的方式来设计复杂页面 随着最终用户对用户体验需求的不断提高,实际上我们很多情况下已经在按照桌面应用的标准来设计Web应用,甚至很多Web页面本身就 ...
- Asp.net MVC Razor视图模版动态渲染PDF,Razor模版生成静态Html
Asp.net MVC Razor视图模版动态渲染PDF,Razor模版生成静态Html 1.前言 上一篇文章我开源了轮子,Asp.net Core 3.1 Razor视图模版动态渲染PDF,然后,很 ...
- ASP.NET MVC利用PagedList分页(二)PagedList+Ajax+JsRender
(原文) 昨天在ASP.NET MVC利用PagedList分页(一)的 最后一节提到,一个好的用户体验绝对不可能是点击下一页后刷新页面,所以今天来说说利用Ajax+PagedList实现无刷新(个人 ...
- 转:【译】Asp.net MVC 利用自定义RouteHandler来防止图片盗链
[译]Asp.net MVC 利用自定义RouteHandler来防止图片盗链 你曾经注意过在你服务器请求日志中多了很多对图片资源的请求吗?这可能是有人在他们的网站中盗链了你的图片所致,这会占用你 ...
- ASP.NET MVC 5 学习教程:添加查询
原文 ASP.NET MVC 5 学习教程:添加查询 起飞网 ASP.NET MVC 5 学习教程目录: 添加控制器 添加视图 修改视图和布局页 控制器传递数据给视图 添加模型 创建连接字符串 通过控 ...
- 【译】ASP.NET MVC 5 教程 - 8:搜索查询
原文:[译]ASP.NET MVC 5 教程 - 8:搜索查询 添加一个搜索的方法和搜索的视图 在本节中,我们为 Index 方法添加查询功能,使我们能够根据电影的题材或名称进行查找. 修改 Inde ...
- ASP.NET MVC利用PagedList分页(一)
前几天看见博客园上有人写ASP.NET MVC的分页思想,这让我不禁想起了PagedList.PagedList是NuGet上提供的一个分页的类库,能对任何IEnumerable<T>进行 ...
- ASP.NET MVC 利用IRouteHandler, IHttpHandler实现图片防盗链
你曾经注意过在你服务器请求日志中多了很多对图片资源的请求吗?这可能是有人在他们的网站中盗链了你的图片所致,这会占用你的服务器带宽.下面这种方法可以告诉你如何在ASP.NET MVC中实现一个自定义Ro ...
- [ASP.NET MVC] 利用自定义的AuthenticationFilter实现Basic认证
很多情况下目标Action方法都要求在一个安全上下文中被执行,这里所谓的安全上下文主要指的是当前请求者是一个经过授权的用户.授权的本质就是让用户在他许可的权限范围内做他能够做的事情,授权的前提是请求者 ...
随机推荐
- Appium 之处理首次启动手机App时的系统权限弹框
一般首次启动一个手机App时都会有系统权限弹框,如下图所示: 权限弹窗上面的按钮都是固定的,只需要定位到“ALLOW”按钮,点击就可以了,代码如下: 这里主要用selenium里面的显示等待模块(We ...
- 个人作业代码GitHub提交步骤
代码提交地址: https://github.com/eudaem/homework1 步骤: 1)用个人账号登陆GitHub,并访问代码提交地址页面,点击页面右上角的“Fork”按钮,拷贝homew ...
- SSO单点登录三种情况的实现方式详解(转载)
单点登录(SSO——Single Sign On)对于我们来说已经不陌生了.对于大型系统来说使用单点登录可以减少用户很多的麻烦.就拿百度来说吧,百度下面有很多的子系统——百度经验.百度知道.百度文库等 ...
- How to extract msu/msp/msi/exe files from the command line
http://www.windowswiki.info/2009/02/19/how-to-extract-msumspmsiexe-files-from-the-command-line/ Micr ...
- PostSharp 结合 log4net 自动记录日志
环境: VS 2012 PostSharp-4.1.28 (下载地址)https://visualstudiogallery.msdn.microsoft.com/a058d5d3-e654-43f ...
- 利用反射(Reflection)处理对象
创建一个学生类: public class Student { public int Id { set; get; } public string Name { set; get; } public ...
- Kylin性能调优记——业务技术两手抓
本文由 网易云发布. 作者:冯宇 本篇文章仅限内部分享,如需转载,请联系网易获取授权. 背景 最近开始使用了新版本的Kylin,在此之前对于新版本的了解只是代码实现和一些简单的新功能测试,但是并没有 ...
- 关于布尔值bool值
1.空或0布尔值为false,非0或非空为true 2.多个判断连在一起判断优先级:(括号)>not >and >or and: print(27 and 1>4) - ...
- Using RDP to connect Windows remote desktop with Linux
安装rdesktop(一般情况下不需要这么做): sudo apt-get install rdesktop 执行连接: rdesktop xxx.xxx.xxx.xxx:3389 -u admini ...
- canvas绘制五角星详细过程
canvas绘制 <canvas id="straight"></canvas> <script> var canvas = document. ...