1. ホーム
  2. cp

ASP.NET URL変更によるページ受け渡し

2022-02-20 03:25:12
<パス
Here, a class is created manually by dummy data, then a collection is created, put in the dropdown box, select the value and click OK
The corresponding id will be generated in another page, feel free to comment if you don't understand


<イグ

クラスを作成します。

using System;
Generic;
Linq;
Web;

namespace WebApplication1
WebApplication1 {
    public class Dept
    {
        public int Id { get; set; }
        public string DeptName { get; set; }
    }
}


選択されたウェブフォーム

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Dept.aspx.cs" Inherits="WebApplication1 .Dept1" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
        <div>
            <asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="true">

            </asp:DropDownList>
        </div>
        <p>><a href="dept_<%=DropDownList1.SelectedValue %>.html">Query</a></p>
    </form>
</body>
</html>



選択されたウェブフォームのバックエンドコード

using System;
Generic;
Linq;
Web;
UI;
WebControls;

WebControls; namespace WebApplication1
WebControls; namespace WebApplication1 {
    public partial class Dept1 : System.Web.UI.
    UI.
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                LoadDeptData();
            }
        }

        private void LoadDeptData()
        {
            //create the data manually
            List<Dept> depts = new List<Dept>
            {
                new Dept{Id=1,DeptName="Xiaoming"},
                new Dept{Id=2,DeptName="XiaoWang"},
                new Dept{Id=3,DeptName="小李"}
            };
            this.DropDownList1.DataSource = depts;
            // the default value displayed
            this.DropDownList1.DataTextField = "DeptName";
            This.DropDownList1.DataValueField = "Id";
            //Save
            this.DropDownList1.DataBind();
        }
    }
}


Modules クラスを継承したクラスを構築する

using System;
Generic;
Generic; using System;
Text.RegularExpressions;
Web;

Web; namespace WebApplication1.
WebApplication1.Modules {
    public class DeptModule : IHttpModule
    IHttpModule {
        public void Dispose()
        {

        }

        public void Init(HttpApplication context)
        {
            context.BeginRequest += Context_BeginRequest;        
        }

        private void Context_BeginRequest(object sender, EventArgs e)
        {
            //process the request
            //get the request url
            HttpApplication application = sender as HttpApplication;
            //relative path
            string url = application.Request.RawUrl;
            //a regular, used to match if it is a relative page
            Regex regex = new Regex(@"dept_(\d+).html");
            // regular after the match, Microsoft gives the paved way, regular after the match an array.
            GroupCollection groupCollection = regex.Match(url).Groups;
            // here to get is the first value of the array, to see if it is a successful match
            if (groupCollection[0].Success)
            {
                //get the second value
                var id = groupCollection[1].Value.Trim('_');
                //store the id, and when you use it, go directly to the second page to get the value
                HttpContext.Current.RewritePath("~/DeptDetail.aspx","","","deptid="+id);

            }
        }
    }
}


クラスをビルドした後、設定ファイルに入って設定する必要があります
ここではフォルダの下に置いているので、設定ファイルではフォルダのパスを追加して型を指定しています

 <system.webServer>
    <modules>
      <add name="Module" type="WebApplication1.Modules.DeptModule"/>
    </modules>
  </system.webServer>


表示されているWebフォーム

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="DeptDetail.aspx.cs" Inherits=" WebApplication1.DeptDetail" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
        <div>
            <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
        </div>
    </form>
</body>
</html>




表示されたウェブフォームのバックエンドコード

using System;
Generic;
Linq;
Web;
UI;
WebControls;

WebControls; namespace WebApplication1
WebControls; namespace WebApplication1 {
    public partial class DeptDetail : System.Web.UI.
    UI.
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                //get the id deposited by the Module directly via request
                this.TextBox1.Text = $"{Request.QueryString["deptid"]}";
            }
        }
    }
}


レンダリング
選択し、クエリーをクリック

アドレスバーとコンテンツが変更されました