Question: I am having some trouble with accessing variables, here in this case Setvariable. When I go inside loop, variable doesn't exists. Anyone have any insight on this. Appreciate your help

Below is my code section in template. Would you please help when you get a chance? Thanks.

```
<!-- TemplateBeginRepeat name="Component.Fields.section" -->
@@SetVariable("columnSectionIndex", "${TemplateRepeatIndex}")@@
Inline Value @@GetVariable("columnSectionIndex")@@       Variable value can be accessed
    <!-- TemplateBeginRepeat name ="Field.links" -->
      Inside Loop Value @@GetVariable("columnSectionIndex")@@  //Not getting declared           variable //value here. Says variable doesn’t exist in ContextVariables.
       <!-- TemplateBeginRepeat name ="Field.linkimages" -->
       <!-- TemplateEndRepeat -->
    <!-- TemplateEndRepeat -->
<!-- TemplateEndRepeat -->

```

Output

```
Variable Added Successfully
Inline Value 0 
Inside Loop Value Variable doesn't exist 

```

My dwt code

```
[TemplateCallable()]
public string SetVariable(string variableName, string value)
    {
        //Remove the old variable and set the new variable
        if (_Engine.PublishingContext.RenderContext.ContextVariables.Contains(variableName))
        {
            _Engine.PublishingContext.RenderContext.ContextVariables[variableName] = value;
            return "Variable Modified Successfully";
        }
        else
        {
            _Engine.PublishingContext.RenderContext.ContextVariables.Add(variableName, value);
            return "Variable Added Successfully";
        }
    }
    [TemplateCallable()]
    public string GetVariable(string variableName)
    {
        //Get the varialbe
        if (_Engine.PublishingContext.RenderContext.ContextVariables.Contains(variableName))
            return _Engine.PublishingContext.RenderContext.ContextVariables[variableName].ToString();
        else
            return "Variable doesn't exist";
    }

```

Answer: 
Problems with variables in loops are well known and even [documented](http://sdllivecontent.sdl.com/LiveContent/content/en-US/SDL_Tridion_2011_SPONE/concept_FAD509B62A6D4ED68949E6DB1752FCB3). 

Basically the first loop is already evaluated by the time you set your variable, so you will always be off by one.

* Set variable i=0
* Loop Iteration 1, i=null
* Loop Iteration 2, i=0
* Loop Iteration 3, i=1
* etc
This might help:
<http://www.tridiondeveloper.com/get-and-set-variables-in-dwts>