Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.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#_Search_Asp.net Core_Pagination_Asp.net Core Mvc - Fatal编程技术网

C# 如何修改此搜索函数以接受多个搜索字符串

C# 如何修改此搜索函数以接受多个搜索字符串,c#,search,asp.net-core,pagination,asp.net-core-mvc,C#,Search,Asp.net Core,Pagination,Asp.net Core Mvc,我需要这个代码的帮助 型号: public class SearchList { public string Name { get; set; } public string className { get; set; } } 控制器: [Authorize] public IActionResult Search(string sortOrder, string currentFilter, string name, int? page, string clas

我需要这个代码的帮助

型号:

public class SearchList
{
    public string Name { get; set; }
    public string className { get; set; }
}
控制器:

   [Authorize]
    public IActionResult Search(string sortOrder, string currentFilter, string name, int? page, string className)
    {
        ViewData["CurrentSort"] = sortOrder;
        ViewData["NameSortParm"] = String.IsNullOrEmpty(sortOrder) ? "name_desc" : "";
        ViewData["DateSortParm"] = sortOrder == "Date" ? "date_desc" : "Date";

        var searchList = FetchList()

        if (name != null)
        {
            page = 1;
        }
        else
        {
            name = currentFilter;
        }
        ViewData["CurrentFilter"] = name;

        if (!String.IsNullOrEmpty(name))
        {
            searchList = searchList.Where(m => m.Name.Contains(name)).ToList();

        }

        switch (sortOrder)
        {
            case "name_desc":
                searchList = searchList.OrderByDescending(s => s.Name).ToList();
                break;
            default:
                break;
        }

        int pageSize = 3;
        return View(PaginatedList<SearchList>.Create(searchList, page ?? 1, pageSize));

    }

    public IList<SearchList> FetchList()
    {
        var searchList = new List<SearchList>();

            searchList.Add(new SearchList
            {             
                Name = "Andy",
                className = "Class Alpha",

            });

            searchList.Add(new SearchList
            {             
                Name = "Nando",
                className = "Class Beta",

            });

            searchList.Add(new SearchList
            {             
                Name = "Anrya",
                className = "Class Alpha",

            });

        return searchList;
    }
[授权]
公共IActionResult搜索(字符串排序器、字符串currentFilter、字符串名称、int?页、字符串类名称)
{
ViewData[“CurrentSort”]=排序器;
ViewData[“NameSortParm”]=String.IsNullOrEmpty(排序器)?“name_desc”:“;
ViewData[“DateSortParam”]=排序器==“日期”?“日期描述”:“日期”;
var searchList=FetchList()
if(name!=null)
{
page=1;
}
其他的
{
名称=当前过滤器;
}
ViewData[“CurrentFilter”]=名称;
如果(!String.IsNullOrEmpty(名称))
{
searchList=searchList.Where(m=>m.Name.Contains(Name)).ToList();
}
开关(分拣机)
{
案例“名称描述”:
searchList=searchList.OrderByDescending(s=>s.Name.ToList();
打破
违约:
打破
}
int pageSize=3;
返回视图(分页列表创建(搜索列表,第1页,页面大小));
}
公共IList FetchList()
{
var searchList=新列表();
添加(新的搜索列表)
{             
Name=“安迪”,
className=“Class Alpha”,
});
添加(新的搜索列表)
{             
Name=“Nando”,
className=“Class Beta”,
});
添加(新的搜索列表)
{             
Name=“Anrya”,
className=“Class Alpha”,
});
返回搜索列表;
}
我的看法

 <form asp-action="Search">
                <div>
                    <table id="t1" class="table table-bordered table-condensed">                            <tr>
                            <th>
                                <b>Details</b>
                            </th>
                        </tr>
                        <tr>
                            <td >
                                Name
                            </td>
                            <td>
           <input class="form-control" type="text" name="name" value="@ViewData["currentFilter"]" />

                   </td>
                        </tr>
                        <tr>
                            <td>
                                Class Name
                            </td>
                            <td>
                                <input class="form-control" style="width: 200px" type="text" name="classname">
                            </td>
                        </tr>
                    </table>
                    <div class="form-group">
                                <input type="submit" value="Search" class="btn btn-default"/>
                    </div>
                </div>
            </form>
        }
    </div>
</div>


         <form>
            <div>
                <table>
                    <tr>
                        <td colspan="6" class="tableheader">
                            Listing</b>
                        </td>
                    </tr>
                    <tr style="font-weight: bold; background:#efefef">
                        <td>
                            @Html.ActionLink("Name", "Search", new { sortOrder = ViewBag.NameSortParm })
                        </td>
                        <td>
                            Class Name
                        </td>
                    </tr>
                    @{
                        foreach (var m in Model.AsEnumerable())
                        {
                            <tr class="oddeventable">
                                <td>
                                    @Html.ActionLink(@m.Name, "TestStudent", "Student", new { Name = m.Name })
                                </td>
                                <td>
                                    @m.ClassName
                                </td>
                            </tr>
                        }
                    }
                </table>
            </div>
        </form>

@{
    var prevDisabled = !Model.HasPreviousPage ? "disabled" : "";
    var nextDisabled = !Model.HasNextPage ? "disabled" : "";
}

    <a asp-action="Search"
       asp-route-sortOrder="@ViewData["CurrentSort"]"
       asp-route-page="@(Model.PageIndex - 1)"
       asp-route-currentFilter="@ViewData["CurrentFilter"]"
       class="btn btn-default @prevDisabled">
        Previous
    </a>
    <a asp-action="Search"
       asp-route-sortOrder="@ViewData["CurrentSort"]"
       asp-route-page="@(Model.PageIndex + 1)"
       asp-route-currentFilter="@ViewData["CurrentFilter"]"
       class="btn btn-default @nextDisabled">
        Next
    </a>

细节
名称
类名
}
表册
@ActionLink(“名称”,“搜索”,新{sortOrder=ViewBag.NameSortParm})
类名
@{
foreach(Model.AsEnumerable()中的var m)
{
@ActionLink(@m.Name,“TestStudent”,“Student”,new{Name=m.Name})
@m、 类名
}
}
@{
var prevDisabled=!Model.HasPreviousPage?“disabled”:“”;
var nextisabled=!Model.HasNextPage?“已禁用”:“;
}
以前的
下一个

当前的视图和控制器只能收到一个搜索字符串“Name”,我想做的是它也可以搜索className,因此基本上控制器将检索名称和className并对其进行过滤,创建新的搜索列表并发回视图。实际上我很迷茫,因为'currentFilter'本身就是'name',所以我不知道如何调整它,使筛选器可以接受两个搜索字符串,以便稍后在视图中,我可以在使用currentFilter时单击“Next”页或排序。

看起来您已经将className作为参数接受。我将删除currentFilter参数并添加/更改您的筛选:

    if (name != null)
    {
        page = 1;
    }
    else
    {
        name = (string)ViewData["CurrentFilterName"];
    }
    ViewData["CurrentFilterName"] = name;

    if (!String.IsNullOrEmpty(name))
        searchList = searchList.Where(m => m.Name.Contains(name)).ToList();

    if (className == null)
        className = (string)ViewData["CurrentFilterClassName"];
    ViewData["CurrentFilterClassName"] = className;

    if (!String.IsNullOrEmpty(className))
        searchList = searchList.Where(m => m.className.Contains(className)).ToList();
同时更改您的输入,使正确的ViewData项默认值。注意,您当前没有设置className的值

并从下一个/上一个文件中删除:

asp-route-currentFilter="@ViewData["CurrentFilter"]"

但是,您可以将方法改为接受currentFilterName和currentFilterClassName,但由于您仍在访问ViewData,因此似乎没有必要这样做。

谢谢您的回答,在视图端如何?我在视图中有下一页和上一页代码,我是否必须修改它接受两个搜索字符串?感谢修改和否添加两个字符串,我已经更新了答案史蒂夫,非常感谢你的帮助。它起作用了。但是,如果我插入类名字符串并将名称留空。第一个页面没有被过滤,但当我点击第二个页面时,它会返回到未过滤的数据。你知道为什么吗?不知道。可能viewdata是单向的,所以请尝试将asp route currentFilterName和asp route currentFilterClassName放入next和prev按钮中,并将它们作为参数添加到方法中。