Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/324.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# 在何处设置变量,使其在回发时不为空?_C#_Asp.net_Webforms_Postback - Fatal编程技术网

C# 在何处设置变量,使其在回发时不为空?

C# 在何处设置变量,使其在回发时不为空?,c#,asp.net,webforms,postback,C#,Asp.net,Webforms,Postback,“我的网页”允许用户通过从可用列表拖动到选定列表,从可用工具列表中选择一个或多个工具。有一个HiddenTools隐藏字段,每当两个列表更改时都会更新该字段-ToolsActive列表中的以逗号分隔的ID列表形式存储在HiddenTools中。当用户单击Save时,HiddentTools中的值存储在数据库中 aspx页面: <asp:HiddenField runat="server" ID="HiddenTools"/> /*<li> can be dragged

“我的网页”允许用户通过从可用列表拖动到选定列表,从可用工具列表中选择一个或多个工具。有一个HiddenTools隐藏字段,每当两个列表更改时都会更新该字段-ToolsActive列表中的以逗号分隔的ID列表形式存储在HiddenTools中。当用户单击Save时,HiddentTools中的值存储在数据库中

aspx页面:

<asp:HiddenField runat="server" ID="HiddenTools"/>

/*<li> can be dragged from one list to the other. Every time the lists 
change, HiddenTools gets updated with the contents of ToolsSelected  
list, formatted as a comma separated string */

<ul id="ToolsAvailable">            
    <%foreach (KeyValuePair<int,string> tool in unusedTools){ %>
        <li id='<%= tool.Key %>'> <%= tool.Value %> </li>
    <% } %>
</ul>

<ul id="ToolsActive">
     <%foreach (KeyValuePair<int,string> aTool in selectedTools){ %>
         <li id='<%= aTool.Key %>'> <%= tool.Value %> </li>
     <% } %>
 </ul>

<asp:Button ID="btnSave" OnClick="btnSave_Click" runat="server" Text="Save"/>

我在哪里可以设置工具变量,以便不会发生对象引用未设置错误?

每个请求都由页面类的新实例处理,因此所有实例变量都会在发现时重置

应该将要保留在请求中的值存储在中,以便在此页面中的回发之间存储值,或者在多个页面之间保留值


注意:不要将这些值存储在静态变量中。它们会在回发之间保留它们的值,但也会在所有访问者之间共享。

在检查回发之前在页面加载中
public partial class Settings
{
    protected ToolPreferences prefs;

    protected Dictionary<int, string> tools;
    protected Dictionary<int, string> unusedTools;
    protected Dictionary<int, string> selectedTools;

    protected void Page_Load(object sender, EventArgs e)
    {
         int AccountId = getAccountId();
         if(!Page.IsPostBack){
             prefs = new ToolPreferences(AccountId);
             PopulateTools();
         }
    }

    private void PopulateTools()
    {
        tools = getPossibleTools();
        unusedTools = new Dictionary<int, string>();
        selectedTools = new Dictionary<int, string>();

        List<int> selectedList = new List<int>();
        if (!string.IsNullOrEmpty(prefs.Tools))
        {
            selectedList = prefs.Tools.Split(',').Select(int.Parse).ToList();
        }
        foreach (KeyValuePair<int, string> aTool in tools)
        {
            if (selectedList.Contains(aTool.Key))
            {
                selectedTools.Add(aTool.Key, aTool.Value);
            }
            else
            {
                unusedTools.Add(aTool.Key, aTool.Value);
            }
        }
    }

    protected void btnSavePreferences_Click(object sender, EventArgs e)
    {
        ToolPreferences tp = ToolPreferences (AccountId);
        tp.Update(HiddenTools.Value);
    }        

}
prefs = new ToolPreferences(AccountId);
PopulateTools();