如何在asp.net中重新加载页面后保留JavaScript值?
我的asp.net应用程序中有一个html表。单击td元素时,我使用JavaScript将该值存储在一个隐藏字段中如何在asp.net中重新加载页面后保留JavaScript值?,javascript,c#,jquery,html,asp.net,Javascript,C#,Jquery,Html,Asp.net,我的asp.net应用程序中有一个html表。单击td元素时,我使用JavaScript将该值存储在一个隐藏字段中 function rebind() { $('.window td').on('click', function () { var idName = this.id; var selectedid = idName.substring(1); console.log(selectedid);
function rebind() {
$('.window td').on('click', function () {
var idName = this.id;
var selectedid = idName.substring(1);
console.log(selectedid);
$('#hidden').val(selectedid);
});
}
现在,我想在这个点击事件之后重新加载这个aspx页面,因为我需要根据td值显示新数据,我还想在重新加载或刷新后保留这个隐藏字段值,我想在服务器端aspx.cs上使用它
我试过像这样的ajax
$.ajax({
url: "Default.aspx",
data: selectedid,
type: "POST",
success: function (result) {
alert('Yay! It worked!');
},
error: function (result) {
alert('Error');
}
});
但我无法访问c端的selectedid变量。我想知道我的方向是否正确
<input type="hidden" id="MyHiddenField" name="MyHiddenField" />
<button type="button" onclick="setHiddenValue();">Set Hidden Value</button>
<br />
<asp:Button runat="server" Text="Cause Postback" OnClick="PostBackBtn_Click" />
<br />
<asp:Label ID="ResultLbl" Text="No result yet, hit Set Hidden Value then Cause Postback." runat="server" />
<script type="text/javascript">
function setHiddenValue() {
$("#MyHiddenField").val("Hello, world!");
}
</script>
您可以看到,现在我们已经在服务器端检索到该值,并使用它在回发时设置一个带有该值的标签。您可以使用另一个隐藏值将该值传递回JS,而不是使用标签
或者,将AJAX与。这样做的好处是页面不会重新加载。您可以将值发送到控制器,并让服务器返回一些更新的数据。这对于带宽来说是非常好的,因为实际上只有我们绝对需要来回发送的数据才会被发送。我们不必担心丢失JavaScript变量,因为页面从不重新加载,用户也不会收到回发闪烁
$.ajax({
url: "api/Products/GetAllProductsForCategory?categoryId=" + $("#MyHiddenField").val);
type: "GET"
})
.done(function(data){
alert("received data: " + data);
//now we'd turn the data into HTML and add it to the DOM
});
ASP.NET Web API
public class ProductsController : ApiController
{
public IEnumerable<Product> GetAllProductsForCategory(string categoryId)
{
return products.Where(p => p.Category == categoryId);
}
}
如果您计划刷新整个页面,则可能需要使用该值设置cookie。其他选项可以是使用ajax加载数据,而不是刷新整个页面。Cookie、localStorage或向服务器端资源发出的ajax请求可保存/检索各种数据库。可能重复的@RoryMcCrossan使用sessionStorage比使用localStorage更好,localStorage在浏览器关闭后被清除,选项卡关闭后的会话存储。我看到您编辑了问题以显示AJAX尝试。但是,您只是在页面上发布。您应该发布到ASP.NET Web API而不是使用代码隐藏,您的服务器端代码将位于Web API控制器中。为什么我需要使用ASP.NET Web API?为什么我不能将数据发送到aspx.cs页面?因为不再支持WebMethod和PageMethod,并且支持ASP.NET Web API,而且它有一个更干净的使用模型,可以促进适当的关注点分离。实际上,我从未使用过ASP.NET Web API,我需要将发送的值作为参数传递给aspx.cs页面中的方法。我需要使用HttpClient从代码隐藏中调用web api吗?@nrvha我提供了两种不同的方法。如果你读了我答案的第一部分,我会解释如何做到这一点。第二个答案是我试图让您切换到一个更新的体系结构。这当然不是必需的,而且我能理解一个新的框架一开始看起来令人望而生畏,但我确实提供了一个指向Microsoft文档的链接,其中包括解释它的教程。是的。我理解。对于第一部分,很遗憾,我无法创建新按钮。单击HTMLTD元素时,应该进行回发,并且必须将值从客户端传输到服务器端。这就是为什么我想使用location.reload,但它不保留隐藏字段中的值。
public class ProductsController : ApiController
{
public IEnumerable<Product> GetAllProductsForCategory(string categoryId)
{
return products.Where(p => p.Category == categoryId);
}
}