Элемент с таким же ключом уже был добавлен. - PullRequest
0 голосов
/ 16 августа 2011

Я работаю над веб-сайтом и пытаюсь перемещать простые переменные, такие как строки и целочисленные значения, с небольшим влиянием.При этом я установил некоторые переменные в словарях TempData и ViewData.Затем я перехожу к соответствующему представлению. После этого я возвращаюсь к исходному виду, в котором я получил переменные.Затем я пытаюсь вернуться к представлению, и внезапно я получаю эту ошибку ...

    An item with the same key has already been added. 

Я совершенно ошеломлен.У меня есть несколько операторов if, чтобы проверить, есть ли ключ в словаре.Какого черта я делаю неправильно?

    [OutputCache(CacheProfile = "ZeroCacheProfile")]
    public ActionResult TemplateInfo(string PopulationID)
    {
        client.ChannelFactory.Credentials.Windows.AllowedImpersonationLevel = System.Security.Principal.TokenImpersonationLevel.Impersonation;
        string msg = (TempData.ContainsKey("message") ? TempData["message"].ToString() : "");
        TempData["message"] = msg;

        //XSLTACOData template = repo.getPatAcoDat(int.Parse(PopulationPatientID));
        //GetPatientTemplateStr("unimportant");
        //List<XSLTACOData> templates = repo.SelectListACOData(int.Parse(PopulationPatientID));

        //XmlDocument Templates = repo.SelectTemplateInfoXML(int.Parse(PopulationPatientID));
        //Templates.Load("");
        //ACOServiceReference.ACOServiceClient client = new ACOServiceReference.ACOServiceClient();

        //ACOServiceRefrence.searchPopulationbyOwnerResponse resp = client.GetOwnedPopulations();

        //string xmlString = client.GetACOData("122");//.GetPopulationPatient("121");
        string templates = "";
        try
        {
            templates = client.GetACOData(PopulationID);
            if (templates == null)
            {
                string site = "PopInfoErrSite";
                site = "PopInfoErrSite";
                View("PopInfoErrSite", site);
            }
        }
        catch (Exception ex)
        {
            string errorStr = ex.InnerException.Message;
            View("PopInfoErrSite", errorStr);
        }
        int PopulationPatID = Int32.Parse(PopulationID);
        int Populationid = Int32.Parse(PopulationID);

        if ((ViewData["TEMPLATES"] == null) || (ViewData.ContainsKey("TEMPLATES")==false))
        {
            ViewData.Add("TEMPLATES", templates);
        }
        if ((TempData.ContainsValue(PopulationID) == false) || (TempData.ContainsKey("POPULATIONID") == false))
        {
            TempData.Add("POPULATIONID", Populationid);
        }            
        //string nullStrToCheckViewDataValue = "I am putting this string here so I can check the value of ViewData[\"TEMPLATES\"] before the view is returned.  Good day sir";
        //nullStrToCheckViewDataValue.
        return View("TemplateInfo");
    }

Выше приведен код для представления ... Что, черт возьми, я делаю неправильно?

1 Ответ

1 голос
/ 17 августа 2011

Вы должны сделать некоторую регистрацию, чтобы знать, какие точные значения находятся в данных до ошибки

Это может быть где-то здесь

if ((TempData.ContainsValue(PopulationID) == false) ||
 (TempData.ContainsKey("POPULATIONID") == false))

Теперь, если TempDate содержит этот ключ, но значение равно нулювыдает исключение при попытке добавить ключ

Попробуйте что-то подобное, чтобы получить больше информации

try
{
    if ((TempData.ContainsValue(PopulationID) == false) || (TempData.ContainsKey("POPULATIONID") == false))
    {
        TempData.Add("POPULATIONID", Populationid);
    }

}
catch (Exception ex)
{

    throw new Exception(ex.Message + " containsValue=" + TempData.ContainsValue(PopulationID) 
        + " containsKey=" + TempData.ContainsKey("POPULATIONID"));
}

и то же самое для шаблонов

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...