Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在toolpart(Web部件)中封装经常重复的代码?_C#_Windows_Sharepoint_Sharepoint 2010_Web Parts - Fatal编程技术网

C# 如何在toolpart(Web部件)中封装经常重复的代码?

C# 如何在toolpart(Web部件)中封装经常重复的代码?,c#,windows,sharepoint,sharepoint-2010,web-parts,C#,Windows,Sharepoint,Sharepoint 2010,Web Parts,我的Web部件应该有很多关于answertype dropdownlist的问题。在设置中,可以使用toolpart配置问题。编写和阅读一个问题的设置。我不知道x-more问题的代码是如何工作的(我必须用哪种方法来使用冗余代码?我在哪里以及如何封装代码? 你有没有给我一个提示,或者你知道一个有趣的网站?我希望你能理解我的问题,否则我会写更多的细节 谢谢 此外,toolpart中的(基本部分)代码: public class FeedbackToolpart : ToolPart { La

我的Web部件应该有很多关于answertype dropdownlist的问题。在设置中,可以使用toolpart配置问题。编写和阅读一个问题的设置。我不知道x-more问题的代码是如何工作的(我必须用哪种方法来使用冗余代码?我在哪里以及如何封装代码? 你有没有给我一个提示,或者你知道一个有趣的网站?我希望你能理解我的问题,否则我会写更多的细节

谢谢

此外,toolpart中的(基本部分)代码:

public class FeedbackToolpart : ToolPart
{
    Label ques1Lab, ans1Lab, typ1Lab;
    DropDownList ddList;
    List<Question> outputList;
    ...

    public FeedbackToolpart() : base() { this.Title = "Bewertungseinstellungen"; }

    protected override void CreateChildControls()
    {
        parentWebPart = (Feedbackwebpart)this.ParentToolPane.SelectedWebPart;
        ...
        ddList = new DropDownList();
        ddList.ID = "TheCheckBoxList";
        ddList.Items.Add("");
        ddList.Items.Add("Schieberegler");
        ddList.Items.Add("Checkboxen");
        ddList.Items.Add("Textbox");
        ddList.SelectedIndexChanged += new EventHandler(ddList_SelectedIndexChanged);
        ddList.AutoPostBack = true;

        ddList.SelectedValue = (parentWebPart.MyValue != null) ? parentWebPart.MyValue[0].answType : "Textbox";

        this.Controls.Add(pan);
        base.CreateChildControls();            
    }

    protected void ddList_SelectedIndexChanged(object sender, EventArgs e) { ... }

    public override void ApplyChanges()
    {
        parentWebPart = (Feedbackwebpart)this.ParentToolPane.SelectedWebPart;
        outputList = new List<Question>();
        outputList.Add(new Question(texQuestion.Text, texAnswers.Text, ddList.SelectedValue));
        parentWebPart.MyValue = outputList;           
    }
}
公共类反馈ToolPart:ToolPart
{
标签ques1Lab、ans1Lab、typ1Lab;
下拉列表;
列表输出列表;
...
public FeedbackToolpart():base(){this.Title=“Bewertungseinstellungen”}
受保护的覆盖无效CreateChildControls()
{
parentWebPart=(Feedbackwebpart)this.ParentToolPane.SelectedWebPart;
...
ddList=新的DropDownList();
ddList.ID=“thecheckbox列表”;
ddList.Items.Add(“”);
ddList.Items.Add(“Schieberegler”);
ddList.Items.Add(“复选框”);
ddList.Items.Add(“文本框”);
ddList.SelectedIndexChanged+=新事件处理程序(ddList\u SelectedIndexChanged);
ddList.AutoPostBack=true;
ddList.SelectedValue=(parentWebPart.MyValue!=null)?parentWebPart.MyValue[0]。answType:“Textbox”;
this.Controls.Add(pan);
base.CreateChildControls();
}
受保护的无效ddList_SelectedIndexChanged(对象发送方,事件参数e){…}
公共覆盖无效ApplyChanges()
{
parentWebPart=(Feedbackwebpart)this.ParentToolPane.SelectedWebPart;
outputList=新列表();
添加(新问题(texQuestion.Text,texAnswers.Text,ddList.SelectedValue));
parentWebPart.MyValue=输出列表;
}
}

一种设计方法可以是:

为每个问题创建一个包含元素的XML(封装文本、UI控件类型和/或您需要的其他特征)。创建.NET类以使用标准的.NET XML序列化程序。将XML文件部署到SharePoint的某个位置,您可以根据解决方案类型(场或沙盒)访问该文件。您可以通过HTTP或SP OM读取其内容。反序列化后,您将枚举循环中的问题对象数组,并为每个问题创建具有指定输入控件的表行


---Ferda

谢谢你的回答。我不确定我是否理解正确。XML文档只是用来存储数据的,对吗?我想再次简化我的问题:这不是数据存储,而是无限制重复的输出。我的工具部件中有一个文本框。如果输入了某个内容,则会显示另一个空文本框并显示如此类推(1.问题)。每个文本框的内容,应在“确定”或“应用”按钮后,显示在网页部件的标签上。我有这样的定义:我如何说ascx文件,我想要x个更多的标签(具有不同的ID)(2.问题)。或者您的答案已经提到了这一点,而我不明白如何使用xml进行重复?xml文件是将数据定义与代码分开的。您不应该对数据进行编码,而应该对逻辑进行编码。而不是在循环中创建控件(这本身不再是多余的)您可以查看一下。您可以创建一个模板,其中包含用于重复的控件,并将数据集合绑定到中继器以填充它。