Finn magasin

Error executing template "QueryPublisher/SearchMagazinesList.cshtml"
System.ArgumentOutOfRangeException: StartIndex cannot be less than zero.
Parameter name: startIndex
   at System.String.Remove(Int32 startIndex)
   at CompiledRazorTemplates.Dynamic.RazorEngine_adc2ae10c4fa4309ba92a8671c2efe95.Execute() in D:\dynamicweb.net\Solutions\JoyCo\narvesen.cloud.dynamicweb-cms.com\files\Templates\QueryPublisher\SearchMagazinesList.cshtml:line 184
   at RazorEngine.Templating.TemplateBase.RazorEngine.Templating.ITemplate.Run(ExecuteContext context, TextWriter reader)
   at RazorEngine.Templating.RazorEngineService.RunCompile(ITemplateKey key, TextWriter writer, Type modelType, Object model, DynamicViewBag viewBag)
   at RazorEngine.Templating.RazorEngineServiceExtensions.<>c__DisplayClass16_0.<RunCompile>b__0(TextWriter writer)
   at RazorEngine.Templating.RazorEngineServiceExtensions.WithWriter(Action`1 withWriter)
   at Dynamicweb.Rendering.RazorTemplateRenderingProvider.Render(Template template)
   at Dynamicweb.Rendering.TemplateRenderingService.Render(Template template)
   at Dynamicweb.Rendering.Template.RenderRazorTemplate()

1 @using System; 2 @using System.Data; 3 @using Dynamicweb.Data; 4 @using System.Web; 5 6 @functions{ 7 8 List<List<string>> GetOptionsData() 9 { 10 var options = new List<List<string>>(); 11 12 using(var connection = Database.CreateConnection()){ 13 14 using (var command = connection.CreateCommand()) 15 { 16 string sql = "SELECT ProductCategory2_CategoryID, ProductCategory2_Category FROM ProductCategory2 ORDER BY ProductCategory2_Category COLLATE Latin1_General_CI_AS ASC"; 17 18 command.CommandText = sql; 19 20 using (var reader = command.ExecuteReader()) 21 { 22 while (reader.Read()) 23 { 24 var temp = new List<string>(); 25 /*temp.Add(reader[0].ToString());*/ 26 temp.Add(reader[1].ToString()); 27 temp.Add(reader[1].ToString()); 28 options.Add(temp); 29 } 30 31 } 32 } 33 } 34 return options; 35 } 36 37 } 38 39 @helper PrintOptions(string value, string text) 40 { 41 <option value="@value">@text</option> 42 } 43 44 @helper GetOptions(){ 45 var options = GetOptionsData(); 46 if(options.Count() > 0) 47 { 48 foreach(List<string> opt in options) 49 { 50 var val = opt[0]; 51 var txt = opt[1]; 52 @PrintOptions(val, txt); 53 } 54 } 55 } 56 57 @{ 58 string qVal = System.Web.HttpContext.Current.Request.QueryString["q"]; 59 60 <div id="magsearch" class="articlecontent"> 61 <div class="inner align-center"> 62 <form action="/default.aspx" method="get" name="MagazineSearch"> 63 <input type="hidden" name="ID" value="@GetGlobalValue("Global:Page.ID")"> 64 <div class="inputwrapper"> 65 <input id="msearch" type="search" name="q" value="@System.Web.HttpContext.Current.Request.QueryString["q"]" placeholder="Tittel"> 66 <input class="button special" type="submit" value="Søk"> 67 </div> 68 <div class="select-wrapper"> 69 <select name="a"> 70 @{ 71 string qStr = System.Web.HttpContext.Current.Request.QueryString["a"]; 72 73 if(!String.IsNullOrEmpty(qStr)){ 74 <option value="">Velg kategori</option> 75 <option value="@qStr" selected>@qStr</option> 76 } else { 77 78 <option value="" selected>Velg kategori</option> 79 } 80 } 81 @GetOptions() 82 </select> 83 </div> 84 85 @* 86 @foreach (var facetGroup in GetLoop("FacetGroups")) 87 { 88 foreach (var facet in facetGroup.GetLoop("Facets")) 89 { 90 var name = facet.GetString("Facet.Name"); 91 <select name="@name"> 92 <option value="" selected>Velg kategori</option> 93 @foreach (var opt in facet.GetLoop("FacetOptions")) 94 { 95 <option value="@opt.GetValue("FacetOption.Value")" selected="@opt.GetValue("FacetOption.Selected")">@opt.GetValue("FacetOption.Label")</option> 96 } 97 </select> 98 } 99 } 100 *@ 101 102 </form> 103 </div> 104 </div> 105 106 <div id="maglist" class="maglist wrapper"> 107 108 <header class="align-center"> 109 <h2>Søkeresultat</h2> 110 </header> 111 112 @if(String.IsNullOrEmpty(@qStr) && String.IsNullOrEmpty(@qVal)) { 113 <div class="ptxt align-center" style="margin-bottom:4rem;">Ditt søk er ikke spesifisert - her viser vi deg noen av våre mest populære magasiner. <br>Leter du etter noe spesifikt anbefaler vi at du angir søkeord eller velger en kategori.</div> 114 <div id="grid"></div> 115 <script> 116 117 $("#grid").load("/Default.aspx?ID=168 .grid-style", function(){ 118 $("#paging").empty().hide(); 119 }); 120 </script> 121 } 122 else 123 { 124 if(Loops.Contains("QueryResultItem")) { 125 126 var results = GetLoop("QueryResultItem"); 127 if(results.Count > 0) 128 { 129 <div class="grid-style"> 130 @foreach (var result in GetLoop("QueryResultItem")) 131 { 132 string catH = @result.GetString("MainCategoryID"); 133 string cat = @result.GetString("CategoryA"); 134 string CategoryA = @HttpContext.Current.Server.UrlEncode(cat); 135 string ProductId = @result.GetString("ProductID"); 136 string ProductIssue = @result.GetString("ProductIssue"); 137 string ImageUrl = @result.GetString("ProductImage"); 138 string strval = @result.GetString("ProductPrice"); 139 string Price; 140 //string Price = String.Format("kr {0},-", int.Parse(strval.Substring(0, strval.IndexOf(".")))); 141 142 143 <div class="box"> 144 <div class="innerbox @catH" style="background:#3B302B url('@ImageUrl') no-repeat left top / 40% 100%;"> 145 <a class="detail" href="/lesestoff/magasiner/magasin?a=@CategoryA&prod=@ProductId&issue=@ProductIssue">Finn utsalgssted</a> 146 <div class="info"> 147 <h3 class="">@result.GetString("ProductTitle")</h3> 148 <p>@result.GetString("ProductDescription")</p> 149 <span class="price"> 150 @if(strval.IndexOf(".") > 0) { 151 Price = String.Format("kr {0},-", int.Parse(strval.Substring(0, strval.IndexOf(".")))); 152 } else if(!string.IsNullOrEmpty(strval)) { 153 Price = String.Format("kr {0},-", strval); 154 } else { 155 Price = ""; 156 } 157 158 @Price 159 </span> 160 </div> 161 <a class="button special small" href="/lesestoff/magasiner/magasin?a=@CategoryA&prod=@ProductId&issue=@ProductIssue">Finn utsalgssted</a> 162 </div> 163 </div> 164 165 } 166 </div> 167 } else { 168 <div class="ptxt align-center">Beklager, søket ga ingen treff. Forsøk et annet søkeord (tittel), eller velg kategori.</div> 169 } 170 } 171 } 172 </div> 173 174 if(GetInteger("DwPaging.PageCount") > 1) 175 { 176 string urlStr = @GetGlobalValue("Global:Pageview.Url"); 177 178 <div id="paging" class="align-center"> 179 180 @if(GetInteger("DwPaging.CurrentPage") > 1) 181 { 182 //var url = GetValue("DwPaging.PreviousPageLink"); 183 var ix = GetInteger("DwPaging.CurrentPage") - 1; 184 urlStr = urlStr.Remove(urlStr.LastIndexOf("&PageNum")) + "&PageNum=" + ix; 185 <a href="@urlStr">@Translate("PreviousPage", "Previous page")</a> 186 } 187 188 @foreach (LoopItem item in GetLoop("DwPaging.LoopPageGroup")) { 189 //string url = item.GetString("PageGroup.PageLink"); 190 string cls=""; 191 if (urlStr.LastIndexOf("&PageNum") > 0) { 192 urlStr = urlStr.Remove(urlStr.LastIndexOf("&PageNum")) + "&PageNum=" + item.GetInteger("PageGroup.PageNumber"); 193 } else { 194 urlStr = urlStr + "&PageNum=" + item.GetInteger("PageGroup.PageNumber"); 195 } 196 if(item.GetBoolean("PageGroup.ActivePage")){ 197 cls="active"; 198 } 199 <a href="@urlStr" class="@cls">@item.GetInteger("PageGroup.PageNumber")</a> 200 } 201 202 @if(GetInteger("DwPaging.CurrentPage") < GetInteger("DwPaging.PageCount")) 203 { 204 //var url = @GetValue("DwPaging.NextPageLink"); 205 var ix = GetInteger("DwPaging.CurrentPage") + 1; 206 urlStr = urlStr.Remove(urlStr.LastIndexOf("&PageNum")) + "&PageNum=" + ix; 207 <a href="@urlStr">@Translate("NextPage", "Next page")</a> 208 } 209 210 </div> 211 } 212 } 213 214