Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 基于单个列搜索显示表:保留搜索字段和值_C#_Asp.net Mvc_Viewbag - Fatal编程技术网

C# 基于单个列搜索显示表:保留搜索字段和值

C# 基于单个列搜索显示表:保留搜索字段和值,c#,asp.net-mvc,viewbag,C#,Asp.net Mvc,Viewbag,我正在使用Razorview和Entity框架,并试图实现以下目标:我有一个下拉列表(id=ColumnName),其中有一个列名列表和一个文本框(id=SearchValue),用于从表中搜索值。单击一个按钮,我将从数据库中检索相关数据(列名称为“ColumnName”且value='SearchValue'的记录)。这很好,但是当我返回相关数据时,我会丢失所选的“SearchValue”和“ColumnName”。我不知道如何保存所选和输入的值,而只是返回表中的相关数据。我的代码如下: HT

我正在使用Razorview和Entity框架,并试图实现以下目标:我有一个下拉列表(id=ColumnName),其中有一个列名列表和一个文本框(id=SearchValue),用于从表中搜索值。单击一个按钮,我将从数据库中检索相关数据(列名称为“ColumnName”且value='SearchValue'的记录)。这很好,但是当我返回相关数据时,我会丢失所选的“SearchValue”和“ColumnName”。我不知道如何保存所选和输入的值,而只是返回表中的相关数据。我的代码如下:

HTML:

    <select id='mySelector' name="ColumnName">
        <option value="">Please Select</option>
        <option value='Country'>Country</option>
        <option value='Title'>Title</option>
        <option value='State'>State</option>
    </select>
    <input type="text" id="cs" name="SearchValue">
    <input type="button" value="Search" onclick="location.href='@Url.Action("FilterByColumn", "CountryController")?SearchValue=' + document.getElementById('cs').value + '&ColumnName=' +document.getElementById('mySelector').value" />
    <table id='myTable'>
    // values
    </table>

请选择
国家
标题
陈述
//价值观
乡政主任:

public ActionResult FilterByColumn(String ColumnName, String SearchValue)
{

    if (!String.IsNullOrEmpty(SearchValue))
    {
        List<Country> result = new List<Country>();
        result = db.Countries.ToList();
        result = db.Countries.Where(ColumnName + ".Contains" + "(\"" + SearchValue.ToLower() + "\")").ToList();
        return View(result);
    }
    return RedirectToAction("Index");
}
public ActionResult FilterByColumn(String ColumnName)
        {  
            ViewBag.searchval = "";   
            string SearchValue = Request.Form["SearchValue"];
            if (SearchValue != "" )
            {
                List<Country> result = new List<Country>();
                result = db.Countries.ToList();
                result = db.Countries.Where(ColumnName + ".Contains" + "(\"" + SearchValue.ToLower() + "\")").ToList();
                ViewBag.searchval = SearchValue; 
                return View(result);
            }
            return RedirectToAction("Index");
        }
public ActionResult FilterByColumn(String ColumnName,String SearchValue)
{
如果(!String.IsNullOrEmpty(SearchValue))
{
列表结果=新列表();
结果=db.Countries.ToList();
结果=db.Countries.Where(ColumnName+”。包含“+”(\“”+SearchValue.ToLower()+“\”)).ToList();
返回视图(结果);
}
返回操作(“索引”);
}

注意:我在这个控制器中还有其他方法,比如创建、编辑

我接着做了searchvalue razor示例,您只需为列名执行适当的razor元素,这将是一个选定的项目,同样在线提供大量教程

<form id="myform" action="FilterByColumn" method="post">
<select id='mySelector' name="ColumnName">
    <option value="">Please Select</option>
    <option value='Country'>Country</option>
    <option value='Title'>Title</option>
    <option value='State'>State</option>
</select>
@if (ViewBag.searchval != "" ){
@Html.Raw ('<input type='text' id='cs' name='SearchValue' value="+@viewbag.searchval+">");
}
else
{  
@Html.Raw ('<input type="text" id="cs" name='SearchValue'>");
}
<input type="submit" value="Search" />
</form>
<table id='myTable'>
// values
</table>

请选择
国家
标题
陈述
@如果(ViewBag.searchval!=“”){
@Html.Raw(“”);
}
其他的
{  
@Html.Raw(“”);
}
//价值观
乡政主任:

public ActionResult FilterByColumn(String ColumnName, String SearchValue)
{

    if (!String.IsNullOrEmpty(SearchValue))
    {
        List<Country> result = new List<Country>();
        result = db.Countries.ToList();
        result = db.Countries.Where(ColumnName + ".Contains" + "(\"" + SearchValue.ToLower() + "\")").ToList();
        return View(result);
    }
    return RedirectToAction("Index");
}
public ActionResult FilterByColumn(String ColumnName)
        {  
            ViewBag.searchval = "";   
            string SearchValue = Request.Form["SearchValue"];
            if (SearchValue != "" )
            {
                List<Country> result = new List<Country>();
                result = db.Countries.ToList();
                result = db.Countries.Where(ColumnName + ".Contains" + "(\"" + SearchValue.ToLower() + "\")").ToList();
                ViewBag.searchval = SearchValue; 
                return View(result);
            }
            return RedirectToAction("Index");
        }
公共操作结果过滤器ByColumn(字符串ColumnName)
{  
ViewBag.searchval=“”;
字符串SearchValue=Request.Form[“SearchValue”];
如果(SearchValue!=“”)
{
列表结果=新列表();
结果=db.Countries.ToList();
结果=db.Countries.Where(ColumnName+”。包含“+”(\“”+SearchValue.ToLower()+“\”)).ToList();
ViewBag.searchval=搜索值;
返回视图(结果);
}
返回操作(“索引”);
}

我这样做的方式是使用jquery将搜索值插入到隐藏字段中,然后确保将其传递回带有ViewBag的视图。这会将信息排除在url之外,这可能会使您的数据库在以后被注入。此外,您还可以使用ajax仅刷新要刷新的数据,并保留所有以前的页面数据。@Danimal:您能用一个例子来解释这一点吗?对于第一个google MVC viewbag来说,这有点太多了。youtube上也有关于MVC和ajax的优秀教程,我是在那里学习的,或者,您需要使用具有
ColumnName
SearchValue
属性的视图模型,以便可以使用
HtmlHelper
方法将控件绑定到这些属性感谢您的回复。但是我的字符串SearchValue=Request.Form[“SearchValue”];即使我在搜索框中键入了一些内容,也会得到一个空值。如果没有post方法,任何内容都不会发布,我假设您在查看了上面的代码后使用了表单标记,我意识到您没有。我在表单项的上下添加了表单标记。如果您的页面不在CountryController中,操作可能会有所不同。您可能需要执行操作=“CountryController/FilterByColumnYes,我有一个post方法。我可以通过执行请求[”SearchValue“],谢谢