出现错误:字符串引用未设置为字符串的实例

问题描述 投票:0回答:2

当我按放置日期过滤数据库中的记录时,我希望能够跨多个页面浏览过滤后的记录。现在,当我尝试转到已过滤记录的第 2 页时,我收到错误:

字符串引用未设置为字符串实例。 参数名称:s `

此外,我注意到 url 中传递的参数发生了变化。例如:

/PurchaseOrder?searchBy=日期&dateSearchBegin=08%2F15%2F2014&dateSearchEnd=09%2F01%2F2014&dateOrderedBegin=&dateOrderedEnd=&search=

当我点击第2页时变成:

/采购订单?page=2&searchBy=日期

因为它目前是在我的代码中编写的,所以我正在使用

Request.QueryString
方法来尝试维护 URL,但它不适用于日期。有没有与此类似的方法可以用来修复此错误并达到我想要的结果?

这是我的控制器和视图的代码:

控制器:

else if (searchBy == "Date")
{
    if (dateSearchBegin == "" || dateSearchEnd == "")
    {
        //string message = "Both date fields are required";

    }
    else
    {
        var dtFrom = DateTime.Parse(dateSearchBegin);
        var dtTo = DateTime.Parse(dateSearchEnd);
        return View(db.PurchaseOrders.Where(x => x.Date >= dtFrom && x.Date <= dtTo).OrderBy(i => i.Date).ToPagedList(page ?? 1, 15));
    }

}
else if (searchBy == "dateOrder")
{
    if (dateOrderedBegin== ""|| dateOrderedEnd == "")
    {
        //string message = "Both date fields are required";
    }
    else
    {
        var dtFrom = DateTime.Parse(dateOrderedBegin);
        var dtTo = DateTime.Parse(dateOrderedEnd);
        return View(db.PurchaseOrders.Where(x => x.DateOrdered >= dtFrom && x.DateOrdered <= dtTo).OrderBy(i => i.Date).ToPagedList(page ?? 1, 15));
    }
}

查看:

@Html.PagedListPager(
    Model, page => Url.Action("Index", 
    new { page, searchBy = Request.QueryString["searchBy"], 
    search = Request.QueryString["search"], 
    dtFrom = Request.QueryString["dtFrom"], 
    dtTo = Request.QueryString["dtTo"] }),
    new PagedListRenderOptions() { DisplayPageCountAndCurrentLocation = true,
    DisplayItemSliceAndTotal = true })
asp.net-mvc pagination pagedlist
2个回答
1
投票

您的查询字符串包含

dateSearchBegin and dateSearchEnd
并且您正在使用
dtFrom = Request.QueryString["dtFrom"], dtTo = Request.QueryString["dtTo"]

将其更改为

Url.Action()
dateSearchBegin = Request.QueryString["dateSearchBegin "], dateSearchEnd = Request.QueryString["dateSearchEnd"]

中的相同键

Url.Action()
将删除空值查询字符串参数。检查字符串的一项建议始终使用
string.IsNullOrEmpty(strVar)
不要使用
strVar == ""


1
投票

"" != null
。您正在将
null
传递给
DateTime.Parse()

dateSearchBegin == ""
更改为
string.IsNullOrEmpty(dateSearchBegin)
以防止出现这种情况。

© www.soinside.com 2019 - 2024. All rights reserved.