【问题标题】:C# web forms - How to pass data from master page to master page when redirect is on web form?C# Web 表单 - 当重定向在 Web 表单上时,如何将数据从母版页传递到母版页?
【发布时间】:2016-03-17 19:59:20
【问题描述】:

当在母版页上时,我有带有事件的 dropDownList。当事件引发我想加载/重定向 webForm.aspx。在这个 webForm.aspx 中,我想加载基于 dropDownList 所选项目的数据。同时我想再次加载 dropDownList 并选择单击的项目。

我创建了一些解决方案,在 masterPage 上使用 Response.Redirect("webform.aspx?courseID=4")。

这是解决这个问题的好方法吗?我想一定有更好的,但我看不到。

感谢您的回答。

【问题讨论】:

  • 您的 MasterPage 是否检查查询字符串以获取 courseID,并相应地更新 dropDownList?
  • 在 MastePage- Page_Load when !Page.IsPostback 我有从数据库加载所有内容的功能,如果有响应上下文 courseID,然后我读取他的值并在 dropDownList 中按值设置活动项目,这有效。现在我尝试用 Route 系统做响应,但是 Page.RouteData.Values["courseID"] as string;在 masterPage 中没有任何内容。
  • 视情况而定,如果在 URL 中包含值是安全的,那么这是一种完全合法的移动值的方式,这里是在 Web 表单之间移动数据的所有标准方式的链接:msdn.microsoft.com/en-us/library/6c3yckfw.aspx
  • 是的,号码是安全的,我正在检查它是否只有号码并且有存储过程。对于第二个问题。有谁知道为什么我不能根据我的问题显示 RouteData 值(从 MasterPage 发送响应 Response.Redirect(Page.GetRouteUrl("CourseSelected", new { courseID = ddlCourse.SelectedValue }));,在 MasterPage 中注册路由 routes.MapPageRoute("CourseSelected", "Course/{courseID}", "~/Course.aspx");ddlCourse.SelectedValue = Page.RouteData.Values["courseID"] as string;)?

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


【解决方案1】:

一种方法是您的解决方案:使用 querystring

第二种方法是:在下拉列表的值上更改您更改某些会话值的值(例如 *Session["course_id"]),然后 Response.Redirect("webform.aspx") 并恢复按 Session["course_id"] 值。

protected void ddlCourses_SelectedIndexChanged(object sender, EventArgs e){
    Session["course_id"] = ddlCourses.SelectedValue;
    Response.Redirect("webform.aspx");
}

关于您的第二个问题(如何从主页面获取路线价值)。我将仅给出简要说明和一个小例子。

在您的母版页中创建一些方法:

protected void IWantToWarkWithRouteValue(){
    //here you will do something
    //and to take value from routing, just use Session["myValue"] (I will explain this value later)
}

您应该在 Page_Load 中调用此方法,而不是在 Pre_InitInit

然后在你的 Course.aspx 中(因为你在这里使用路由)创建下一个方法:

protected void SetCourseSessionFromTheRoute(){
    if (Page.RouteData.Values["courseID"] != null)
        Session["myValue"] = Page.RouteData.Values["courseID"].ToString();
}

并在Page_PreInit中调用这个方法:

protected void Page_PreInit(object sender, EventArgs e){
    SetCourseSessionFromTheRoute();
}

感谢 ASP.NET 页面的生命周期,您可以为所欲为。

您可以阅读有关页面生命周期的信息here

正如我所说,这只是一个例子。您可能会找到更好的解决方案。

希望对你有帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-03
    • 1970-01-01
    • 2012-06-24
    • 1970-01-01
    • 1970-01-01
    • 2012-01-23
    • 1970-01-01
    • 2014-08-01
    相关资源
    最近更新 更多