【问题标题】:getting the error: String reference not set to an instance of a String收到错误:字符串引用未设置为字符串的实例
【发布时间】:2014-08-19 12:02:35
【问题描述】:

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

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

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

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

当我点击第 2 页时变为:

/PurchaseOrder?page=2&searchBy=Date

由于它目前是在我的代码中编写的,因此我正在使用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 paging pagedlist


    【解决方案1】:

    您的查询字符串包含dateSearchBegin and dateSearchEnd,并且您正在使用dtFrom = Request.QueryString["dtFrom"], dtTo = Request.QueryString["dtTo"]

    将其更改为 Url.Action() dateSearchBegin = Request.QueryString["dateSearchBegin "], dateSearchEnd = Request.QueryString["dateSearchEnd"] 中的相同键

    Url.Action() 将删除空值查询字符串 args。检查字符串的一个建议总是使用string.IsNullOrEmpty(strVar),不要使用strVar == ""

    【讨论】:

    • 另外,你知道如何让asp.net中出现一个消息框吗?使用 Windows 窗体时,您可以简单地使用 MessageBox.Show("text") 是否有任何等价物?我希望用户在执行日期搜索时在两个文本框中输入有效日期。
    • 如果您使用 HTML5,请使用 &lt;input type=date /&gt; 否则您需要对表单提交事件使用 java-script 验证。
    【解决方案2】:

    "" != null。你将null 传递给DateTime.Parse()

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

    【讨论】:

    • 另外,你知道如何让asp.net中出现一个消息框吗?使用 Windows 窗体时,您可以简单地使用 MessageBox.Show("text") 是否有任何等价物?我希望用户在执行日期搜索时在两个文本框中输入有效日期。
    猜你喜欢
    • 1970-01-01
    • 2011-08-19
    • 2020-06-14
    • 1970-01-01
    • 2014-11-28
    • 2019-12-07
    • 2021-08-23
    • 1970-01-01
    • 2016-05-13
    相关资源
    最近更新 更多