我使用一个WebGrid来显示以下结果:
从表中选择*,如'**';
显示结果没有问题。
但是,如果我单击WebGrid的列名对结果进行排序,我将得到一个错误,否则页面上什么都不会显示。
我能做什么使WebGrid排序工作??
@{
Layout = "~/_SiteLayout.cshtml";
Page.Title = "Test";
var value = "";
var sqlquery = "";
var isvalid = true;
var searchaskey = "";
var grid = new WebGrid();
if(IsPost)
{
value = Request.Form["input"];
if(string.IsNullOrEmpty(value))
{
isvalid = false;
}
if (isvalid)
{
searchaskey = "'%" + value + "%'";
sqlquery = "select * from joblist where JobCategory like " + searchaskey;
var db = Database.Open("StarterSite");
grid = new WebGrid( db.Query(sqlquery));
}
}
}
<form method="post" action="Test.cshtml">
@value
@sqlquery
<div>
<input name="input" type="text" value=@value>
<button type="Submit">Submit</button>
</div>
</form>
@{
if(IsPost)
{
@grid.GetHtml(
columns:grid.Columns(
grid.Column(columnName : "JobTitle",header:" Job Title "),
grid.Column(columnName : "JobCategory",header:" Job Category "),
grid.Column(columnName : "CompanyName",header:" Company Name "),
grid.Column(columnName : "PostedOn",header:" Post Date ")
)
)
}
}发布于 2012-05-10 11:41:33
webGrid的工作方式是当您单击一个列来求助时,浏览器将返回到服务器,根据新的排序列查找新列表。但是,您的代码正在测试它是否是post,如果不是POST,则不返回任何结果。
为了解决这个问题,在一篇文章中,您的代码需要保存搜索规范,这样它就可以在后续的GET上使用搜索准则。你会这么做的
Session["MySavedSearchAsKey"] = searchaskey;然后,当有一个GET时,您会检查会话“MySavedSearchAsKey”中是否有什么内容。如果是这样的话,那么继续运行查询并生成webGrid。如果是空的,什么都别做。
最后,您的代码行
sqlquery = "select * from joblist where JobCategory like " + searchaskey;永远不要像这样构建一行SQL。使用SQL注入攻击来攻击这种类型的代码是非常简单的。相反,
sqlquery = "select * from joblist where JobCategory like %0";
results = db.Query( sqlquery, searchaskey);这称为参数化SQL,是通过代码与数据库对话的安全方法。%0将被您在查询语句中传递的参数替换,因此它所做的事情与查询完全相同,但只是以一种非常安全的方式。
祝好运!
https://stackoverflow.com/questions/10510888
复制相似问题