posts - 7, comments - 5, trackbacks - 0, articles - 2
  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理

公告

2011年4月26日

要点:
1. TextBox等验证属性,message可不填,有默认提示。

2. btnNewRole.OnClientClick = Window1.GetShowReference() + "return false;";

3. From:有Row等标签分行,相当于html里的table。
   SimpleForm:默认一个控件自动一行,TextBox等里面的Label属性有效。
   Panel:好像和SimpleForm一样。
   ContentPanel:和原版Panel一样,TextBox等里面的Label属性无效。

4. 验证属性:Button里的ValidateForms填SimpleForm等,就是对此SimpleForm里的控件验证。

5. TextBox等里面的Label靠右:<style type="text/css">.x-form-item label { text-align: right; } </style>

6. 尽量用ExtAspNet.PageContext.Redirect、ExtAspNet.PageContext.Refresh,内部都是转成js代码。

7. 页面内有原版控件,需要在PageManager加AjaxAspnetControls="控件ID",否则不能互动。

8. ext:DatePicker 的 DateFormatString 默认是 yyyy-MM-dd,最好改成 yyyy-M-d

9. 如果用到asp:FileUpload,PageManager里EnableAjax="false",而且前一页的window里也要EnableAjax="false",不然会有莫名的缓存(重新开window不会刷新)。

10. 不要在window里指定IFrameUrl="URL",这样在grid里打开会load两次。

11. window里如果打开URL,一定要EnableIFrame="true"

12. From、SimpleForm的行高:.x-form-item  {   height: 28px;  }

13. 如果window是本页,target只能是self(默认值),cs里不能用ActiveWindow,只能指定ID

14. asp控件最好都放ContentPanel里,不然会又莫名的错误

缺陷:
1. TextBox里没有原版的MaxLength属性,验证里的MaxLength属性是不能强制限制输入长度,只会提示(不能提交)。

2. 没有ListBox控件。 

3. 好像不用加runat="server"也可以用,但为了保持习惯还是都加了。 

4. 没有FileUpload控件,而且要关掉ajax才能用。 

5. Form或Grid里RowHeight属性无效。 

6. FormRow的hidden属性无效。

7. Grid.Column只能靠左对齐。对数字显示难看。

8.Textbox.hidden=true,对应的label不会hidden。 

9.Textbox.label 在cs里修改无效。

posted @ 2011-04-26 21:42 轩轩部落 阅读(452) 评论(2) 编辑

1     常用属性:

1.1   CompareControl:指需要与谁比较(这个谁通常是一个文本框),它的值必须为某个控件的ID

1.2   CompareOperator:指比较的种类,有以下六种

1.2.1       Equal :等于 

1.2.2       GreaterThan :大于

1.2.3       GreaterThanEqual :大于等于

1.2.4       LessThan :小于

1.2.5       LessThanEqual :小于

1.2.6       NotEqual :不等于

1.2.7       注:其中1.2.21.2.31.2.412.5适用于CompareTypeintfloat两种情况。

1.3   CompareMessage:指如果比较失败所提示的信息,如果为空则提示默认信息。

1.4   CompareType:指比较的值的类型,有以下三种

1.4.1       String:比较字符串

1.4.2       Int:比较整数

1.4.3       Float:比较浮点型小数

1.5   CompareValue:指该文本框的值需要与哪个值进行比较,需要注意的问题是如果该值与CompareControl的值均不为空,则CompareValue失效。

1.6   EmptyText:指当文本框的text属性值为空或未写时,在文本框中默认显示的值。

1.7   MaxLength:限定文本内容的最长长度。

1.8 MaxLengthMessage:如果文本框的长度大于MaxLength规定的值,系统所提示的信息,如果为空,则提示默认信息。

1.9   MinLength:限定文本内容的最短长度。

1.10 MinLengthMessage:如果文本框的长度短于MinLength规定的值,系统所提示的信息,如果为空,则提示默认信息。

1.11   NextFocusControl:指当光标在某一个文本框中,在点击回车按钮后,光标应该转向的位置,它的值必须为页面中出现的某一个控件的ID

1.12 OffsetRight:指文本框的最右边距离它右边的一个控件的值,通常为一个像素值。

2     需要注意的问题

2.1 如果将一个textbox直接放在页面中或者是panel中,它本身固有的属性Label的值是不显示的,其代码如下:

<ext:Panel ID=”Panel1” runat=”server” BodyPadding=”5px” EnableBackgroundColor=”true”

            ShowBorder=”true” ShowHeader=”true” Title=”Panel”>

            <Items>

                <ext:TextBox ID=”TextBox1” runat=”server” Label=”Textbox1” Text=””>

                </ext:TextBox>

            </Items>

        </ext:Panel>

<ext:TextBox ID=”TextBox2” runat=”server” Label=”Textbox2” Text=””></ext:TextBox>

       相反如果将其放在form,simpleform中其值便可以显示:

   <ext:Form ID=”Form2” runat=”server” BodyPadding=”5px” EnableBackgroundColor=”true”

            Title=”Form”>

            <Rows>

                <ext:FormRow ID=”FormRow1” runat=”server”>

                    <Items>

                        <ext:TextBox ID=”TextBox3” runat=”server” Label=”Textbox3” Text=””>

                        </ext:TextBox>

                    </Items>

                </ext:FormRow>

            </Rows>

        </ext:Form><ext:SimpleForm ID=”SimpleForm1” runat=”server” BodyPadding=”5px” EnableBackgroundColor=”true”

            Title=”SimpleForm”>

            <Items>

                <ext:TextBox ID=”TextBox4” runat=”server” Label=”Textbox4” Text=””>

                </ext:TextBox>

            </Items>

        </ext:SimpleForm>

posted @ 2011-04-26 20:12 轩轩部落 阅读(438) 评论(0) 编辑

2011年2月22日

在VS2008中使用Nhibernate进行单元测试时,运行测试后,Nhibernate报无法找到hibernate.cfg.xml文件,具有原因如下:

每次执行单元测试时,系统会自动生成一个测试结果的文件夹,测试的程序为测试结果文件内Out目录,而在单元测试工程中即使将hibernate.cfg.xml文件设为始终复制,也仅仅是复制到单元测试工程的bin文件夹内,在进行单元测试时,并没有将hibernate.cfg.xml文件复制到测试文件夹下。

解决方案如下:

1:在VS2008菜单栏中选择测试->编辑测试运行配置->本地测试运行,打开localtestrun.testrunconfig对话框(如下图)

2)选择“部署”项,将hibernate.cfg.xml配置文件添加到部署列表内。

注:如果有其他的文件或目录需要复制到out目录内,也要在此添加。

posted @ 2011-02-22 16:20 轩轩部落 阅读(294) 评论(0) 编辑

2010年5月19日

在Enterprise Library企业库中没有给出将日志记录到Oracle数据库的SQL脚本,为了能够让日志记录到Oracle数据库,编写如下脚本:

spool DDD.log

prompt
prompt Creating table ORACLE_ENTLOG
prompt ============================
prompt
create table ORACLE_ENTLOG
(
  ID                 NUMBER,
  EVENTID            NUMBER,
  PRIORITY           NUMBER,
  TITLE              NVARCHAR2(500),
  MESSAGE            NVARCHAR2(1000),
  MACHINE            NVARCHAR2(100),
  TIMESTAMPS         DATE,
  SEVERITY           NVARCHAR2(100),
  APPLICATIONDOMAIN  NVARCHAR2(1000),
  PROCESSID          NVARCHAR2(256),
  PROCESSNAME        NVARCHAR2(500),
  WIN32THREADID      NVARCHAR2(128),
  THREADNAME         NVARCHAR2(500),
  EXTENDEDPROPERTIES NVARCHAR2(1000),
  CATEGORY           NVARCHAR2(1000)
)
tablespace SYSTEM
  pctfree 10
  pctused 40
  initrans 1
  maxtrans 255
  storage
  (
    initial 64K
    next 8K
    minextents 1
    maxextents unlimited
    pctincrease 50
  );

prompt
prompt Creating sequence SEQ_ENTLOG
prompt ============================
prompt
create sequence SEQ_ENTLOG
minvalue 1
maxvalue 9999999999999999999999
start with 1
increment by 1
cache 20;

prompt
prompt Creating procedure ADDCATEGORY
prompt ==============================
prompt
create or replace procedure AddCategory
(
    categoryName   in     nvarchar2,
    logID            in    number
)
as
begin
    UPDATE oracle_entlog SET Category=categoryName WHERE ID=logID;
    commit;
end;
/

prompt
prompt Creating procedure WRITELOG
prompt ===========================
prompt
CREATE OR REPLACE PROCEDURE WRITELOG
(
    LogId     out         number,
    EventId   in         number,
    Priority       in         number,
    Title         in           nvarchar2,
    Message       in         nvarchar2,
    machineName    in        nvarchar2,
    timestamp      in    Date,
    Severity        in        nvarchar2,
    AppDomainName   in         nvarchar2,
    ProcessId       in         nvarchar2,
    ProcessName      in      nvarchar2,
    Win32ThreadId    in        nvarchar2,
    ThreadName       in         nvarchar2,
    formattedmessage  in      nvarchar2

)
is
begin

    insert into oracle_entlog
    (
        ID,
        EventId,
        Priority,
        Title,
        Message,
        Machine,
        Timestamps,
        Severity,
        ApplicationDomain,
        ProcessId,
        ProcessName,
        Win32ThreadId,
        ThreadName,
        ExtendedProperties   
    )
    values
    (
        seq_entlog.Nextval,
        EventId,
        Priority,
        Title,
        Message,
        machineName,
        timestamp,
        Severity,
        AppDomainName,
        ProcessId,
        ProcessName,
        Win32ThreadId,
        ThreadName,
        formattedmessage  
        );     
        commit;   
        select seq_entlog.Currval into LogId from dual;
      
end  WriteLog;
/


spool off

 使用方法和向SqlServer插入日志一样。

posted @ 2010-05-19 11:00 轩轩部落 阅读(218) 评论(0) 编辑

2010年5月15日

学习MVP设计模式,看到View层所有的界面控制都在P层实现,View只负责显示,这样做需要把View层的所有的控件事件传递到P层。感觉这样写太复杂,我采用下面的方式实现,不知道这样做是不是符合MVP模式那。

以下是我的例子解释

Form1:View层

IFormView:IView层,里面定义了几个显示View、注入P层对象,返回数据接口函数

FormPresenter:P层,主要功能:注入View对象,处理业务逻辑

BussinessModel:M层,数据访问

下面是三层的结构图:

代码如下:

Form1.cs

Code
1 public partial class Form1 : Form,IFormView
2 {
3
4 private FormPresenter presenter;
5
6
7
8 public Form1()
9 {
10 InitializeComponent();
11 }
12
13 #region IFormView 成员
14
15 public void ShowView()
16 {
17 this.ShowDialog();
18 }
19
20 public void Hello(string str)
21 {
22 this.label1.Text = str;
23 }
24
25 public void SetPresenter(FormPresenter presenter)
26 {
27 this.presenter = presenter;
28 }
29
30 #endregion
31
32
33 private void btnSub_Click(object sender, EventArgs e)
34 {
35 presenter.SetTextInfo(this.textBox1.Text);
36 }
37 }
38
39  

 

 

P层代码:

 

Code
1 public class FormPresenter
2 {
3 private IFormView view;
4 private BussinessModel bmodel = new BussinessModel();
5 public FormPresenter(IFormView view)
6 {
7 this.view = view;
8 }
9
10 public void SetTextInfo(string str)
11 {
12 view.Hello("Hello," + str);
13 }
14 }

IFormView接口代码:

 

1 public interface IFormView
2 {
3 void ShowView();
4 void Hello(string str);
5 void SetPresenter(FormPresenter presenter);
6 }

Program.cs代码

 

Code
1 [STAThread]
2 static void Main()
3 {
4 Application.EnableVisualStyles();
5 Application.SetCompatibleTextRenderingDefault(false);
6
7 IFormView view = new Form1();
8 FormPresenter presenter = new FormPresenter(view);
9 view.SetPresenter(presenter);
10 view.ShowView();
11
12 }

 

 

在Form1.cs内部调用P层的公有方法,处理业务逻辑,P将计算结果通过IFormView提供的接口返回到View层,在View层显示结果。

我在网上看到的标准的MVP实例是不再View层注入P对象的。

不知道以上做法是否符合MVP设计模式那。

请高手给解答一下!

例子源代码下载

posted @ 2010-05-15 11:28 轩轩部落 阅读(385) 评论(2) 编辑

2010年4月23日

打开资源管理器选择"工具"——“文件夹选项”——“查看”——“使用简单共享”把这个勾去掉就会出现了。

windows2003 如果没有“共享”选项卡,需要启动Server服务 Computer Browser服务 Workstation服务,这样就好了。

posted @ 2010-04-23 22:37 轩轩部落 阅读(546) 评论(0) 编辑

2010年4月18日

摘要: 在今天的MVC测试中,我想在路由中传递多个参数,比如 Blog/Archtive/2010-04-18/4.html,参数是两个,一个是时间:2010-04-18,一个是序号:4。 经过一天的验证测试,最后终于找到了解决方案,并且还验证出了两种方案(赞一个^_^ ),由于初学MVC,测试中遇到了不少的问题,尤其是第一种方案的测试,开始的思路就是想采用多参数的URL,但不知道怎么回事,验证了一上午也...阅读全文

posted @ 2010-04-18 23:53 轩轩部落 阅读(2463) 评论(0) 编辑