我正在使用ASP.NET Webmatrix并尝试通过Form Post请求从SQL数据库加载更多数据。
默认情况下,我有2个结果,当每次结果增加+2时,我点击加载更多按钮。
一切都很好。 !但是当我试图重新加载我的页面时,浏览器显示错误。
即使我的表单已发布但浏览器仍显示重新提交错误。如何删除此错误? Plz救救我! &安培;这是我的代码:
**.cshtml**
@{
var rowsNumb = 2;
var db = Database.Open("Northwind");
if (IsPost){
rowsNumb = Request["lastRec"].AsInt() + 2;
}else{}
var maxRecs = db.QueryValue("SELECT COUNT([Product Id]) FROM Products");
var sql = @"SELECT * FROM Products ORDER BY [Product Id]
OFFSET 0 ROWS FETCH NEXT @0 ROWS ONLY";
rowsNumb = (rowsNumb > maxRecs ? maxRecs : rowsNumb);
var result = db.Query(sql, rowsNumb);
}
<!DOCTYPE html>
<html lang="en">
<head>
</head>
<body>
<table>
@foreach(var row in result){
<tr>
<td>@row["Product Name"]</td>
<td>@row["English Name"]</td>
<td>@row["Unit Price"]</td>
</tr>
}
</table>
<form method="post">
<input type="hidden" name="lastRec" value="@rowsNumb"/>
<button type="submit">Load More</button>
</form>
</body>
</html>
答案 0 :(得分:2)
这不是浏览器或您的代码中的错误。这只是浏览器的问题,当它想要询问用户用户是否想要加载具有他之前传递的相同数据的页面时。没错!
这是因为您通过提交表单来获取数据。所以它的行为就像你想要通过传递一些数据(如用户名等)来获得数据。这就是它要求这个对话框的原因。
<button type="submit">Load More</button>
以上按钮就是这个原因。
您可以做的是使用action
并将自己转发到新页面,在该页面中您将使用Response.Redirect()
向后页添加额外参数,可能是{{1 }}。在HTML中你不会写页面= 2或任何东西。但它会表示该页面是新的,并且页面未使用POST请求加载。
这样,您再也无法获得对话框了。直到您使用提交按钮加载页面内容,您将获得此框。
还有另一种方法可以做到这一点。哪个使用jQuery(我知道我知道jQuery总是不是唯一的函数,但是)并删除了www.example.com/products?page=2
属性。例如,HTML将是
type="submit"
处理此代码的jQuery将是
<button id="submit">Load More</button>
ASP.NET的
来自jQuery API的
$('#submit').click(function () {
// either use ajax to load the content and add it, or
// use window.location() to move to the next page and
// come back to this page using Response.Redirect();
}
块if(IsPost)
此代码块仅在有标题表示请求已发布时执行(如果提交的表单具有if (IsPost) {
rowsNumb = Request["lastRec"].AsInt() + 2;
Response.Redirect("~/Default?v2");
}
,则请求发布)。因此,如果你有这个障碍,那么使用我的想法就不会有效。
删除条件并执行它。
method="post"
就是这样,这会将变量更新为2,然后再次提供结果。只有在通过表单发出请求并将方法设置为post时才会执行POST。这也是错误在您的UI中生成的点。
rowsNumb = Request["lastRec"].AsInt() + 2;
Response.Redirect("~/Default?v2");
如果我必须编写代码,上面的代码就是它自己的代码。这段代码就是您所需要的。它会重新加载页面并更新内容等等。不使用@{
var rowsNumb = 2;
var db = Database.Open("Northwind");
rowsNumb = Request["lastRec"].AsInt() + 2;
// no need for else block since there is no code there
var maxRecs = db.QueryValue("SELECT COUNT([Product Id]) FROM Products");
var sql = @"SELECT * FROM Products ORDER BY [Product Id]
OFFSET 0 ROWS FETCH NEXT @0 ROWS ONLY";
rowsNumb = (rowsNumb > maxRecs ? maxRecs : rowsNumb);
var result = db.Query(sql, rowsNumb);
}
<!DOCTYPE html>
<html lang="en">
<head>
</head>
<body>
<table>
@foreach(var row in result){
<tr>
<td>@row["Product Name"]</td>
<td>@row["English Name"]</td>
<td>@row["Unit Price"]</td>
</tr>
}
</table>
<a href="~/page?lastRec=@rowsNumb">Load More</a>
</body>
</html>
请求。