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方法都要求在一个安全上下文中被执行,这里所谓的安全上下文主要指的是当前请求者是一个经过授权的用户.授权的本质就是让用户在他许可的权限范围内做他能够做的事情,授权的前提是请求者 ...
随机推荐
- HDU 6065 RXD, tree and sequence (LCA+DP)
题意:给定上一棵树和一个排列,然后问你把这个排列分成m个连续的部分,每个部分的大小的是两两相邻的LCA的最小深度,问你最小是多少. 析:首先这个肯定是DP,然后每个部分其实就是里面最小的那个LCA的深 ...
- WCF Service 配置文件注释(转)
<?xml version="1.0" encoding="utf-8" ?> <configuration> <system.S ...
- 跳转AppStore 评分
-(void)goToAppStore { NSString *str = [NSString stringWithFormat: @"itms-apps://ax.itunes.apple ...
- C的打印输出格式
#include<stdio.h> int main() { float test1=12.3224356546565461-0.1; int test2=13; char test3[] ...
- ORACLE EBS中查看系统已经打过的补丁
SELECT COUNT (BUG_NUMBER) FROM AD_BUGS WHERE BUG_NUMBER LIKE '%7303031%' --对应 patch号 ; --TABLESAD_ ...
- Git Note - git tag
git tag is used to create labels, usually for version numbers. Format: git tag <TagName> <r ...
- iOS NSMutableArray "removeObjectIdenticalTo" vs "removeObject"
NSMutableArray 有多种可以删除元素的方法. 其中 removeObject,removeObjectIdenticalTo 这两个方法是有区别的. [anArray removeObje ...
- 【12c OCP】最新CUUG OCP-071考试题库(49题)
49.(11-1) choose the best answer Examine the structure of the SHIPMENTS table: You want to generate ...
- 如何获取token值
登录的时候需要拿到token值,需要跟后端配合才能拿到 官方说明: https://developers.weixin.qq.com/miniprogram/dev/api/api-login.htm ...
- matlab中显示灰阶图像
matlab的数据源文件中400张图片,每张图片是一个112*92的矩阵表示,而400张图片存储在一个cell数组ime中,显示第一张图片,指令是: colormap(gray) imagesc(im ...