0

在我的视图/页面上,我在页面加载时加载了 1 条记录,每次单击下一个按钮时,我都打算在表中加载下一个(一个)记录,并一直加载到最后一个。所以我正在用下一条记录刷新页面。

[单击下一步按钮时查看]

现在,当单击下一个按钮时,我有以下内容

在视图中

<a class="form-group" style="float: left; margin-right: 5px;">
  <input type="submit" value="Next" name="NextRecordButton" class="btn btn-primary" />
</a>

在控制器中

if (NextRecordButton == "Next" && Request.HttpMethod == "POST")
        {
            /*keep track of the current id on page*/
            string idOnView = Request.Form["q_guid"];
            var currentRowId = Guid.Parse(idOnView);

            /*select next id*/
            var myNext = db.q_product.Where(i => i.q_guid != currentRowId)
                .OrderBy(i => i.q_guid)
                .Skip(1)
                .First().q_guid;

            ViewBag.NextProduct = myNext;
            var idNext = Convert.ToString(ViewBag.NextProduct);

            NpgsqlConnection connectionSearch = new NpgsqlConnection("Host=test;Database=test;Username=test;Password=test");
            connectionSearch.Open();

            NpgsqlCommand cmdNext = new NpgsqlCommand
                                ("SELECT * FROM q_product " +                                    
                                "WHERE @idnext ilike '%' || q_guid || '%'" +
                                "FETCH FIRST 1 ROWS ONLY"
                                , connectionSearch);                

            cmdNext.Parameters.AddWithValue("@idnext", idNext);
            cmdNext.ExecuteNonQuery();  

问题

现在单击带有此代码的下一步按钮,-它将完美地加载第二个产品到页面上再次单击下一步-它将完美地加载第三个产品到页面上

但从那时起,在加载第 3 个产品并单击下一步后,它会在单击时继续在第 2 个和第 3 个产品之间迭代。即使表中有超过 3 种产品。

4

1 回答 1

0

通过使用 NpgsqlCommand 查询而不是 Linq 查询解决了问题。所以本节

/*select next id*/
var myNext = db.q_product.Where(i => i.q_guid != currentRowId)
      .OrderBy(i => i.q_guid)
      .Skip(1)
      .First().q_guid;

已按以下方式更改和实施

/*select next id*/
NpgsqlCommand myNextSql = new NpgsqlCommand
       ("Select q_guid FROM q_product WHERE q_guid > :idonview LIMIT 1", connectionSearch);

       myNextSql.Parameters.AddWithValue("idonview", currentRowId);
       NpgsqlDataReader reader = myNextSql.ExecuteReader();
       while (reader.Read())
       {
          var myID = reader[0].ToString();
          ViewBag.NextProduct = myID;
       }
       connectionSearch.Close();

       var idNext = Convert.ToString(ViewBag.NextProduct);

单击下一步按钮时,我现在可以浏览表中的所有下一行。我很想知道更多知识渊博的人,为什么 linq 实现对我来说会这样,因为当您在表中搜索“获取下一行”时,它似乎是广泛使用的方法。

于 2017-07-25T09:24:12.753 回答