打印本文 打印本文 关闭窗口 关闭窗口
使用 ASP.NET Community Starter Kit建造网站
作者:武汉SEO闵涛  文章来源:敏韬网  点击数6105  更新时间:2009/4/23 10:44:10  文章录入:mintao  责任编辑:mintao
       HtmlTextBox:用于FAQ参考

另外,我们还需要5个对应控件用于显示FAQ,如前面写好的FaqAnswer用来显示答案。下面是EditFaq的创建方法示例:

public EditFaq() : base()
{
   SkinFileName = _skinFileName;
   SectionContent = _sectionContent;
 
   this.SkinLoad += new SkinLoadEventHandler(SkinLoadFaq);
   this.Preview += new PreviewEventHandler(PreviewFaq);
   this.Submit += new SubmitEventHandler(SubmitFaq);
}

在该方法中初始化了用于显示的界面文件名和SectionContent属性(后面将有说明),然后把基类中的事件与响应方法建立了关联。

ContentEditPage这一事件响应函数中要包含以下逻辑:装载界面文件,处理预览按钮的点击和提交按钮的点击。

void SkinLoadFaq(Object s, SkinLoadEventArgs e)
{
   txtQuestion = (TextBox)GetControl(e.Skin, "txtQuestion");
 
   // continue initializing all controls with GetControl . . .
}

正如我们在前面章节所讨论的那样,CSK动态装载界面(ASCX)文件显示特定主题。如果你需要通过程序与界面上的控件交互操作,首先要得到该控件实例的引用,如我们编辑FAQ时需要得到TextBox对象中的内容。你可以通过SkinnedComunityControl基类中的GetControl或GetOptionalControl方法来实现,在这里只有显示问题的TextBox需要被引用:

protected override void OnLoad(EventArgs e)
{
   if (!Page.IsPostBack)
   {
      ContentPageID = Int32.Parse(
         Context.Request.QueryString["id"]);
 
      FaqInfo faqInfo =
         (FaqInfo)FaqUtility.GetFaqInfo(
         objUserInfo.Username, ContentPageID);
 
      EnsureChildControls();
      txtAnswer.Text = faqInfo.AnswerText;
      dropTopics.SelectedTopicID = faqInfo.TopicID;
      txtIntro.Text = faqInfo.IntroText;
      txtQuestion.Text = faqInfo.QuestionText;
      txtReference.Text = faqInfo.ReferenceText;
   }
}

当页面加载时,我们需要从数据库中获取已有FAQ的信息。CSK会在查询参数中传递该内容的ID,然后我们取出ID再传给FaqUtility类中的GetFaqInfo方法。一旦得到了FAQ对象,就在页面上显示其信息。

void PreviewFaq(Object s, EventArgs e)
{
   if(objSectionInfo.EnableTopics)
      topicPreview.Name = dropTopics.SelectedItem.Text;
   questionPreview.Text = txtQuestion.Text;
   introductionPreview.Text = txtIntro.Text;
   answerPreview.Text = txtAnswer.Text;
   referencePreview.Text = txtReference.Text;
}

当用户点击预览按钮后,我们要把所有编辑的内容转移到预览控件中,在那里编辑内容按照定义的风格被渲染和显示。使作者能更有效观察和设计页面在实际运行时的外观。ContentEdit类会保证作者看到的页面中有预览面板并观察结果。

void SubmitFaq(Object s, EventArgs e)
{
   if (Page.IsValid)
   {
      // Get Topic
      int topicID = -1;
      if (objSectionInfo.EnableTopics)
         topicID = Int32.Parse(dropTopics.SelectedItem.Value);
 
      FaqUtility.EditFaq(
         objUserInfo.Username,
         objSectionInfo.ID,
         ContentPageID,
         topicID,
         txtQuestion.Text,
         txtIntro.Text,
         txtAnswer.Text,
         txtReference.Text);
 
      Context.Response.Redirect(CommunityGlobals.CalculatePath(
         String.Format("{0}.aspx", ContentPageID)));
   }
}

SumbitFaq事件响应函数通过FaqUtility类把内容更新到数据库中。一旦更新结束,我们发给用户一个提示并离开编辑页面,然后重定向到浏览页面查看已更新的FAQ。

int ContentPageID
   {
      get { return (int)ViewState["ContentPageID"]; }
      set { ViewState["ContentPageID"] = value; }
   }
   TextBox txtQuestion;
   TopicPicker dropTopics;
   TextBox txtIntro;
   HtmlTextBox txtAnswer;
   HtmlTextBox txtReference;
   DisplayTopic topicPreview;

上一页  [1] [2] [3] [4] [5] [6] [7] [8] [9] [10]  ...  下一页 >> 

打印本文 打印本文 关闭窗口 关闭窗口