首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有Select * Like *的WebGrid

带有Select * Like *的WebGrid
EN

Stack Overflow用户
提问于 2012-05-09 06:34:10
回答 1查看 456关注 0票数 0

我使用一个WebGrid来显示以下结果:

从表中选择*,如'**';

显示结果没有问题。

但是,如果我单击WebGrid的列名对结果进行排序,我将得到一个错误,否则页面上什么都不会显示。

我能做什么使WebGrid排序工作??

代码语言:javascript
复制
    @{
        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  ")
                )
            )
        }
    }
EN

回答 1

Stack Overflow用户

发布于 2012-05-10 11:41:33

webGrid的工作方式是当您单击一个列来求助时,浏览器将返回到服务器,根据新的排序列查找新列表。但是,您的代码正在测试它是否是post,如果不是POST,则不返回任何结果。

为了解决这个问题,在一篇文章中,您的代码需要保存搜索规范,这样它就可以在后续的GET上使用搜索准则。你会这么做的

代码语言:javascript
复制
Session["MySavedSearchAsKey"] = searchaskey;

然后,当有一个GET时,您会检查会话“MySavedSearchAsKey”中是否有什么内容。如果是这样的话,那么继续运行查询并生成webGrid。如果是空的,什么都别做。

最后,您的代码行

代码语言:javascript
复制
sqlquery = "select * from joblist where JobCategory like " + searchaskey;

永远不要像这样构建一行SQL。使用SQL注入攻击来攻击这种类型的代码是非常简单的。相反,

代码语言:javascript
复制
sqlquery = "select * from joblist where JobCategory like %0";

results = db.Query( sqlquery, searchaskey);

这称为参数化SQL,是通过代码与数据库对话的安全方法。%0将被您在查询语句中传递的参数替换,因此它所做的事情与查询完全相同,但只是以一种非常安全的方式。

祝好运!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10510888

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档