.net asp:button按下,页面刷新了,js不能维持原来的状态了怎么办?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了.net asp:button按下,页面刷新了,js不能维持原来的状态了怎么办?相关的知识,希望对你有一定的参考价值。

我的登录框是ascx,嵌入index.aspx中。
index.aspx js:
<script type="text/javascript" >
function show()
document.getElementById("mask").style.display = "";
document.getElementById("content1").style.display = "";
document.getElementById("mask").style.filter = "Alpha(Opacity=70)";//透明度
document.getElementById("mask").style.height =document.getElementById("meiyou").style.height;

function hide()
document.getElementById("mask").style.display = "none";
document.getElementById("content1").style.display = "none";

function ScrollDiv()
document.getElementById("meiyou").style.top = document.documentElement.scrollTop + "px";
document.getElementById("meiyou").style.left = document.documentElement.scrollLeft + "px";
document.getElementById("meiyou").style.height =document.documentElement.clientHeight ;
document.getElementById("meiyou").style.width = document.documentElement.clientWidth;


window.onscroll = ScrollDiv;
window.onresize = ScrollDiv;
</script>

<div onclick="show()">测试<div>
<div align="center" id="meiyou" style="width: 100%; position: absolute; left:0px; top:0px;">
<div style="width: 100%; background-color:Gray; display:none; height:100%; position:absolute;left:0px;top:0px;" id="mask"></div>
<div style="width: 703px; display: none; position: absolute; bottom:0px; margin: auto -351px 0px; " id="content1">
<form id="login" runat="server">
<LOGIN:login ID="logindex" runat="server"></LOGIN:login>
</form>
</div>
</div>

login.ascx
<asp:Button id="LogButton" runat="server" Text="登 录"> </asp:Button>
asp:button一旦提交,它不管你登录是否成功了,这个弹出的登录层就又隐藏起来了。
怎么样才能在提交后还保持div还是在显示啊?
还有就是在登录成功以后怎么刷新一下父窗口,也就是index.aspx.

web编程,最大的不便就是状态的保持
Asp.net在控件的状态保持上已经做的很好了
js属于编程的东西,不在ViewState状态保持范围内,所以需要你自己处理

比如你这个,可以在后台里调用js:
ClientScript.RegisterStartupScript(this.GetType(), "aa", "show();", true);
就可以显示了,上面这句话效果等同于:
Response.Write("show()");//不推荐使用Response.Write

登录成功以后怎么刷新一下父窗口:
ClientScript.RegisterStartupScript(this.GetType(), "aa", "location.href.replace(location.href);", true);
参考技术A <div style="width: 703px; display: none; position: absolute; bottom:0px; margin: auto -351px 0px; " id="content1">

function show()
document.getElementById("mask").style.display = "";
document.getElementById("content1").style.display = "";
document.getElementById("mask").style.filter = "Alpha(Opacity=70)";//透明度
document.getElementById("mask").style.height =document.getElementById("meiyou").style.height;

function hide()
document.getElementById("mask").style.display = "none";
document.getElementById("content1").style.display = "none";
你上面的全是隐藏
display: none,你一刷新当然是弹出后又隐藏了

你最后看一下你的show ()和hidden()并且看一下你调的方法的位置和顺序,就是这一块出问题了
参考技术B 用AJax来做更方便

ASP.NET MVC RedirectToAction 不刷新页面

【中文标题】ASP.NET MVC RedirectToAction 不刷新页面【英文标题】:ASP.NET MVC RedirectToAction does not refresh the page 【发布时间】:2019-09-12 09:34:18 【问题描述】:

我有控制器操作刷新,它只是更新当前页面。 但是当我通过 RedirectoAction 方法调用该操作时,我遇到了问题,页面没有更新。我必须在按下刷新按钮后独立调用刷新操作,以获得所需的结果。

这是我的客户端代码。这会调用我的 ResetItems 操作,然后重定向到 Refresh 操作。

function ResetSelectedItems() 

var guidId = $("#guidId")[0].value;
console.log(guidId[0].value);
$.ajax(
    type: 'POST',
    url: '/UploadFile/ResetItems',
    data:  guidId : guidId,

     
)

    [HttpPost]
    [ActionName("ResetItems")]
    public ActionResult ResetItems(string guidId) 
    
      //Some logic here updating in db etc..
      return RedirectToAction("Refresh");
    

    [ActionName("Refresh")]
    public ActionResult Refresh(int? id) 
    
      //Refresh logic which eventually render refresh the current view 
    

另外我想提一下,在这个项目中,我们使用了 IUnitOfWork 模式,它会以某种方式导致这种意想不到的结果吗?

P.S 我是 ASP.NET 的新手,请不要判断强硬

编辑:到目前为止我做了什么来找出发生了什么。

我通过提琴手检查我是否从浏览器获得了缓存结果,或者我猜浏览器没有缓存问题,因为我得到了 http 200。

我在两个动作中都使用了这个属性[OutputCache(Location=System.Web.UI.OutputCacheLocation.None)] 没有帮助。

【问题讨论】:

使用ajax你不能重定向RedirectToAction("Refresh");你可以使用location.href或者你可以使用return JavaScript("document.location.replace('" + Url.Action("Refresh", "Refresh") + "');"); 我不是直接从 ajax 调用重定向。之后我对我的 resetitem 操作进行了 ajax 调用,然后我将重定向操作设置为 refreshaction 您的 RedirectToAction("Refresh"); 实际上将您的操作返回到您的 ajax 成功,您可以在您的 ajax 调用的 success 响应中以文本形式获得它 【参考方案1】:

您正在使用 AJAX 请求,这意味着无论响应如何,都不会重新加载 html 页面。 我猜你需要这样的东西:

[HttpPost]
[ActionName("ResetItems")]
public ActionResult ResetItems(string guidId) 

     //Some logic here updating in db etc..
     //string redirectUrl = Url.Action("Refresh", new  id = "your int id" );
     string redirectUrl = Url.Action("Refresh");
     return Json(new  redirectUrl );


$.ajax(
    type: 'POST',
    url: '/UploadFile/ResetItems',
    data:  guidId : guidId,
    success: function (response) 
        window.location.replace(response.redirectUrl);
    
);

【讨论】:

以上是关于.net asp:button按下,页面刷新了,js不能维持原来的状态了怎么办?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 css 样式设置为 asp.net 按钮?

如何在 ASP.Net 中的 asp:Button 中放置 Bootstrap Glyphicon?

解决input输入框按下回车键刷新页面

试图在声音停止后获得一个按钮来刷新页面。按下按钮时声音开始

关于 <asp:Button> 的 JQuery / ASP.NET 新手问题

每次按下刷新按钮时DataGridView都会重复vb.net