asp.net自带的Calendar必须要放在form标签里才可以,不然要抛异常
因为我把calendar的所有按钮都去掉了,而且现在的情况是放在form标签里有点困难,所以需要把这个限制去掉
请问如何实现我看了一下calendar的源码中的Render方法,好像不好重写,因为里面调用了N多私有方法,继承类无法访问……就是这下这几行害死我了if (this.Page != null)
{
    this.Page.VerifyRenderingInServerForm(this);
}

解决方案 »

  1.   

    他这样写 就是为了 让Calendar放在form标签内你去掉了很可能就不能用了。
      

  2.   

    如果你想使用asp.net自己带的calendar,基本上你必须放到form runat=server中,因为它是服务端控件。
      

  3.   

    我能保证不放在form里能正常运行现在的问题是,有没有方法达到我的目的?
      

  4.   

    把Calendar的runat=server去掉
    哈哈,我乱讲的
      

  5.   

    受不了了
    我自己写!
    从WebControl继承,TNND
      

  6.   

    没用的孩子,所有的webcontrol控件都必须放在<form runat="server">中
      

  7.   

    1.最好放在HtmlForm里运行,或者你说说为什么要防在HtmlForm外面?因为你仅用它生成日历视图而不用它的互动功能?2.如果你一定要这样做,或许也有办法的:还是继承Calendar,在Render()中创建一个新的Page实例,里面放一个HtmlForm,把this放到该HtmlForm里,然后base.Render(),最后再把this放回原本的容器中。反正你要的就是Render()中HtmlTextWriter的输出,找另外一个无关的Page来“借腹生子”应该是没问题的。
      

  8.   

    谁说的webcontrol都要放在form里?
    我放个LABEL不行?
    需要交互功能,说白了就是需要提交数据的才必须放在FORM里我就是只想要视图,不想要互动功能
    谢谢楼上的建议,我明天试试,现在没vs.net,呵呵
      

  9.   

    对了,那这样不是两个<form runat="server">了?
    不行吧?
      

  10.   

    不存在两个<form runat="server">的问题。你在Calendar派生类的Render()中这样写:
    Control originalParent = this.Parent;
    Page tempPage = new Page();
    HtmlForm tempForm = new HtmlForm();
    tempPage.Controls.Add(tempForm);
    tempForm.Controls.Add(this);  //(1)
    base.Render(writer);  //(2)
    originalParent.Controls.Add(this);(1)当一个控件被添加到另一个控件时,会自动先从它Parent哪里删除它,详细用Reflector看。
    (2)writer是指HtmlTextWriter。我不确定这样做是否可行,因为Calendar到底对环境有多敏感我不清楚。
      

  11.   

    好像不行哦
    能不能换一个呢?
    我用过一个javascript的还是很好用