Service动态加载用户控件,对类的属性get或set值实现思路

    public string _cid = “0”;
    public string _aid = “0”;

近段时间,有朋友叫Insus了解一下反射(Reflection)方面的知识,反射提供了封装程序集、模块和类型的对象(Type类型)。可以使用反射动态创建类型的实例,将类型绑定到现有对象,或从现有对象获取类型并调用其方法或访问其字段和属性。如果代码中使用了属性,可以利用反射对它们进行访问。
下面的例子,是Insus练习对一个类别的属性进行set和get值。

using System;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Web.UI;
using System.IO;
using System.Text.RegularExpressions;
using System.Web.UI.HtmlControls;
[WebService(Namespace = “]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
//若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。 
[System.Web.Script.Services.ScriptService]
public class WebService : System.Web.Services.WebService {

    public string cid
    {
        get
        {
            return _cid;
        }
        set
        {
            _cid = value;
        }
    }
    public string aid
    {
        get
        {
            return _aid;
        }
        set
        {
            _aid = value;
        }
    }
    protected void Page_Load(object sender, EventArgs e)
    {
    }
}

复制代码 代码如下:

  <script language=”javascript” type=”text/javascript”>
// <!CDATA[
    function Button1_onclick() {
      WebService.GetUserControlPath(“~/WebUserControl.ascx”, onSuccessed, onFailed);
    }
    function onSuccessed(result) {
      $get(“TextArea1”).vaule = result;
      var divResult = $get(“divShow”);
      divResult.innerHTML= result;
    }
    function onFailed(error) {
      alert(error);
    }
// ]]>
  </script>

以下是ASCX下面的代码

Insus.NET一向是写asp.net程序,练习也是在站点进行。
创建一个网页,引用两个namespace:

图片 1图片 2代码

复制代码 代码如下:

using Insus.NET;
using System.Reflection;

    HtmlForm form = new HtmlForm();
    form.Controls.Add(userControl);

您可能感兴趣的文章:

  • asp.net
    动态创建TextBox控件及状态数据如何加载
  • ASP.NET动态添加控件一例
  • asp.net
    动态添加多个用户控件
  • ASP.NET
    页面中动态增加的控件、添加事件
  • ASP.net
    动态加载控件时一些问题的总结

复制代码 代码如下:

新建DEFAULT.ASPX页面加载用户控件,显示

UserControl uc = (UserControl)LoadControl(actionOne[1].ToString());
uc.GetType().GetProperty(“cid”).SetValue(uc, cid.ToString(),
null);//主要就在这里,这里是添加属性,并赋值。
uc.GetType().GetProperty(“aid”).SetValue(uc, id.ToString(), null);
pageAscx.Controls.Add(uc);

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
/// <summary>
/// Summary description for Member
/// </summary>
namespace Insus.NET
{
public class Member
{
private string _Name;
public string Name
{
get
{
return _Name;
}
set
{
_Name = value;
}
}
public Member()
{
//
// TODO: Add constructor logic here
//
}
}
}

<asp:TextBox ID=”TextBox1″ runat=”server”></asp:TextBox>
<asp:Button ID=”Button1″ runat=”server” Text=”Button” />
<asp:GridView ID=”GridView1″ runat=”server” BackColor=”LightGoldenrodYellow” 
  BorderColor=”Tan” BorderWidth=”1px” CellPadding=”2″ ForeColor=”Black” 
  GridLines=”None”>
  <FooterStyle BackColor=”Tan” />
  <PagerStyle BackColor=”PaleGoldenrod” ForeColor=”DarkSlateBlue” 
    HorizontalAlign=”Center” />
  <SelectedRowStyle BackColor=”DarkSlateBlue” ForeColor=”GhostWhite” />
  <HeaderStyle BackColor=”Tan” Font-Bold=”True” />
  <AlternatingRowStyle BackColor=”PaleGoldenrod” />
</asp:GridView>

ASPX.CS里的代码:

复制代码 代码如下:

在平时开发过程我们经常动态加载用户控件。今天我主要介绍如何在ASP.NET
AJAX中使用WEB SERVICE加载用户控件。

复制代码 代码如下:

首先写一个类,再写一个可读写的属性:

点击按钮就可以动态加载用户控件,大家可以自己动手弄下,如果有兴趣,我只是给自己留个记号

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Insus.NET;
using System.Reflection;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
//实例化类
Member objMember = new Member();
//对属性set值
PropertyInfo pi = objMember.GetType().GetProperty(“Name”,
BindingFlags.Public | BindingFlags.Instance);
if (null != pi && pi.CanWrite)
{
pi.SetValue(objMember, “Insus.NET”, null);
}
//对属性get值
PropertyInfo pii = objMember.GetType().GetProperty(“Name”,
BindingFlags.Public | BindingFlags.Instance);
if (null != pii && pi.CanRead)
{
object obj_Name = pii.GetValue(objMember, null);
Response.Write(obj_Name.ToString());
}
}
}

 

您可能感兴趣的文章:

  • C#反射技术的简单操作(读取和设置类的属性)
  • C#中使用反射获取结构体实例及思路
  • PHP反射类ReflectionClass和ReflectionObject的使用方法
  • c#反射机制学习和利用反射获取类型信息
  • c#反射调用方法示例
  • Ruby中的反射(Reflection)应用实例
  • PHP的反射类ReflectionClass、ReflectionMethod使用实例
  • C#利用反射来判断对象是否包含某个属性的实现方法
  • C#
    反射(Reflection)的用处分析

    ownerPage.Controls.Add(form);

读写属性:

 <div>
    <asp:ScriptManager ID=”ScriptManager1″ runat=”server”>
      <Services>
        <asp:ServiceReference Path=”~/WebService.asmx” />
      </Services>
    </asp:ScriptManager>
  </div>

    public par(string _year,string _color) {
        year = _year;
        color = _color;
    }
    public string Year {
        get { return year; }
        set { year = value; }
    }

 

</head>
<body>
  <form id=”form1″ runat=”server”>
  <asp:ScriptManager ID=”ScriptManager1″ runat=”server”>
    <Services>
      <asp:ServiceReference Path=”~/WebService.asmx” />
    </Services>
  </asp:ScriptManager><p>
    <input id=”Button1″ type=”button” value=”button” onclick=”return Button1_onclick()” /></p>
  <div id=”divShow”>
  </div>
  </form>
</body>
</html>

 

public partial class WebUserControl : System.Web.UI.UserControl
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack) { 
        List<par> parlist=new List<par>();
            parlist.Add(new par(“2009″,”blue”));
            parlist.Add(new par(“2010″,”red”));
            parlist.Add(new par(“2011″,”yellow”));
            parlist.Add(new par(“2012”, “black”));
            this.GridView1.DataSource=parlist;
            this.GridView1.DataBind();
        }
    }
}
public class par {
    private string year, color;

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

 

  [WebMethod(EnableSession = true)]// EnableSession:XML Web services 方法启用会话状态,则为 true。默认为 false。 
  public string GetUserControlPath(string UserControlPath) {
    Page ownerPage = new Page();
    UserControl userControl = (UserControl)ownerPage.LoadControl(UserControlPath);
    userControl.EnableViewState = false;

 

 

    HttpContext.Current.Server.Execute(ownerPage, writer, false);
    return CleanHtml(writer.ToString());
  }

图片 3图片 4代码

 

    public string Color {
        get { return color; }
        set { color = value; }
    }
}

 

  /// <summary>
  ///  Removes Form tags
  /// </summary>
  /// <param name=”html”></param>
  /// <returns></returns>
  private string CleanHtml(string html) {
    return Regex.Replace(html, @”<[/]?(form)[^>]*?>”, “”, RegexOptions.IgnoreCase);
  }

图片 5图片 6代码

后台代码如下

  [WebMethod]
  public string HelloWorld() {
    return “Hello World”;
  }

我们首先新建一个WEBSERVICE文件,把WEB SERVICE引入到页面中

接着新建一个用户控件WebUserControl.ascx,页面布局显示,代码可以自己喜欢

注意在WebService添加[System.Web.Script.Services.ScriptService]
代码如下

 

图片 7图片 8代码

图片 9图片 10代码

    StringWriter writer = new StringWriter();