【问题标题】:Redirect Pages after Inserting Data in ASP.NET /C#在 ASP.NET /C# 中插入数据后重定向页面
【发布时间】:2012-10-14 05:01:13
【问题描述】:

我制作了一个将数据插入数据库的网络表单。单击插入按钮时,会触发插入数据的代码,插入数据成功后,它会重定向到显示“数据插入成功”的其他页面。 原来是这样……

插入页面.....

if (CodeClass.InsertData(txtFirstName.Text, txtLastName.Text, Gender) == true)
     {
         String A = "InsertSuccess";

          Response.Redirect("OtherPage.aspx?&lnk=" + A);
     }

其他页面....

   String link = null;
            link = Request.QueryString["lnk"];
            if (link == "InsertSuccess")
            {
                txtLabel.Text = "Record inserted succesfully!";

            }

我的问题是当我访问其他页面时,即使我没有使用插入页面..我得到相同的结果。假设我在地址栏中输入了 ..http://localhost:8672/OtherPage.aspx?&lnk=InsertSuccess ..我得到“成功插入记录!”标签。我希望其他页面永远不会显示“成功插入记录!”当我实际上没有插入某些东西而只是通过浏览器的地址栏访问它时的消息。

【问题讨论】:

  • 为什么还要重定向到另一个页面?如果您只想显示状态消息,只需将标签添加到表单,并将属性 Visible 设置为 false。插入设置标签文本的数据后,使其可见并使插入表单不可见。这样一来,您就可以为一条小消息保存整个页面。
  • 感谢非常实用的建议,但我这样做的真正目的是如何确保页面是通过网站重定向而不是直接访问链接加载的。不过有用的建议:)

标签: c# asp.net redirect postback response.redirect


【解决方案1】:

插入代码成功后添加此脚本即可:

ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "Success", "setInterval(function(){location.href='Default.aspx';},3000);", true);

【讨论】:

  • 这将有助于对为什么此代码解决问题有更多的解释。另外,你回答的第一句话看不懂,如果能查一下就好了。
【解决方案2】:

你应该改变你的查询字符串。

    Response.Redirect("OtherPage.aspx?&lnk=" + A);

应该是:

    Response.Redirect("OtherPage.aspx?lnk=" + A);

未编码时的“&”符号被视为参数分隔符。

    Response.Redirect("OtherPage.aspx?lnk=" + A + "&secondParam=someValue");

根据评论的要求:
看到这个SO post
MSDN HttpServerUtility.UrlEncode
.NET Slave - Working with query strings

String.IsNullOrWhiteSpace() 有时可能很方便。

【讨论】:

  • 感谢这篇文章。实际上,我对使用查询字符串只有一点点想法。我只是从其他项目中复制了它。这很有帮助!我可以问一些有关使用此功能的链接吗?我对 asp.net 真的很陌生,谢谢 :)
【解决方案3】:

假设您修复了您的网址并删除了“?”之后的“&” ..您必须删除“&”

您是否考虑过浏览器缓存?有时缓存可以做到这一点,但由于缓存设置,我遇到了与您类似的问题。

【讨论】:

  • 我仍然是 asp.net 的新手。这似乎很有趣!浏览器缓存..我想我会在未来解决这个问题。谢谢
【解决方案4】:
if (CodeClass.InsertData(txtFirstName.Text, txtLastName.Text, Gender) == true)
     {
       HttpContext.Current.Items["A"]= "Inserted Successfully";

          Server.Transfer("OtherPage.aspx);
     }



string ContextData =(string) HttpContext.Current.Items["A"];

if(!string.Empty(ContextData))
{  
Label1.Text = ContextData;
}

【讨论】:

    【解决方案5】:

    好吧,我看到你不想通过在地址栏中键入“http://localhost:8672/OtherPage.aspx&lnk=InsertSuccess”来获取消息,那么我建议你不要传递一个字符串一个标志,您应该传递记录 ID,然后在您的其他页面上,您应该检查您的记录 ID 是否确实存在于您的表中。

    为此,我希望您使用 ID 作为 GUID 类型。

    你会有这样的东西:

    “http://localhost:8672/OtherPage.aspx&lnk=BBB5259E-F5A3-4271-ABC8-D95A00BE9770”

    否则 int ID 太容易记住了。

    【讨论】:

    • 这种方法在您使用 Windows Azure 时非常有用,您可以在其中拥有多个实例并且需要将变量保存在持久存储中,但对于我所看到的会话变量来说已经足够了.
    • oic 我还是 asp.net 的新手,也许我会在一段时间内工作 :) 谢谢
    【解决方案6】:

    您可以使用 Session 变量来存储更新状态,然后检查它是否在 otherpage.aspx 中可用,更新文本框并重置它。

    插入页面

    if (CodeClass.InsertData(txtFirstName.Text, txtLastName.Text, Gender) == true)
         {
              Session["status"]="InsertSuccess";
    
    
              Response.Redirect("OtherPage.aspx");
         }
    }
    

    其他页面

    if (Session["status"]!=null)
            {
                txtLabel.Text = "Record inserted succesfully!";
                Session["status"]=null; 
    
            }
    

    【讨论】:

    • 谢谢!它真的帮了我很多! :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-25
    相关资源
    最近更新 更多