umbraco学习6:macros之用户控件

.net用户控件常用来构建复杂的macro,可以执行一些复杂的服务器端代码,也经常用于构建表单。本文中笔者将以一个简单的例子介绍下基于.net用户控件的macro的使用方法。

本例中,笔者将在首页上添加一个根据手机号查询其归属地的功能。为了实现该功能,笔者将调用网上提供的一个免费web service,服务地址为:http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx。

首先创建一个名为starterkit的project,将无用的文件或文件夹删除,只保留Properties和References,如下图所示:

为了实现手机号码查询功能,笔者将web service地址引用到我们的project中,选中References,在右键菜单中选择添加web引用就可以完成。下一步就是创建我们所需要的用户控件,命名为RetrieveMobileCodeControl,并添加相应的input控件,RetrieveMobileCodeControl.aspx的代码如下:

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="RetrieveMobileCodeControl.ascx.cs"
    Inherits="starterKit.RetrieveMobileCodeControl" %>

后台功能代码RetrieveMobileCodeControl.aspx.cs如下:

        protected void btnExecute_Click(object sender, EventArgs e)
        {
            var mobileService = new MobileCodeWS();
            var phoneNumber = txtPhoneNumber.Text;
            try
            {
                var result = mobileService.getMobileCodeInfo(phoneNumber, string.Empty);
                litResult.Text = result;
            }
            catch (Exception ex)
            {
                litResult.Text = ex.Message;
            }
        }

编译该project,并将生成的starterKit.dll文件拷贝到umbraco站点的bin文件夹下,将控件RetrieveMobileCodeControl.aspx拷贝到usercontrols文件夹下,为了避免每次build完成后,都要手动拷贝文件的麻烦,可以定义project的编译后事件,自动的拷贝文件,命令行如下:

xcopy $(TargetPath) C:\Working\UmbracoSite\bin /y
xcopy $(ProjectDir)*.ascx C:\Working\UmbracoSite\usercontrols /y

完成后,就可以创建相应的macro了,选中Developer section,新建一个名为RetrieveMobileCode的macro,并将新建的用户控件赋给它后保存,如下图所示:


创建了macro后,选中setting section,选择Home Template,插入新建的macro,代码如下:

<%@ Master Language="C#" MasterPageFile="~/masterpages/Master.master" AutoEventWireup="true" %>

	
         
            my baby        
         
                   
   

重新刷新Home页面,会出现错误,这是因为RetrieveMobileCode macro包含了服务器端代码,所以要将它们放在form表单下,代码如下:

<%@ Master Language="C#" MasterPageFile="~/masterpages/Master.master" AutoEventWireup="true" %>

    
my baby

更改后,Home页面将可以正常打开,我们可以看到新添加的控件,输入手机号码验证服务器端代码可以正常运行,如下图所示:


关于使用基于.net用户控件的macro,就先介绍到这里,下一节笔者将介绍如何调试服务器端代码。

你可能感兴趣的:(umbraco)