NL LOGIN Arrow right
U gebruikt een verouderde browser. Gebruik Google Chrome of Mozilla Firefox om uw ervaring te verbeteren.
Error parsing template "Designs/Huuskes/Forms/Form/WinActionVoteForm.cshtml"
Line 307: (306:1) - Unexpected "if" keyword after "@" character.  Once inside code, you do not need to prefix constructs like "if" with "@".

1 @using Huuskes.Core.Services.Abstract 2 @using System.Web.Mvc 3 @using Huuskes.Repository.Helpers; 4 5 @inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>> 6 @{ 7 var pageView = Dynamicweb.Frontend.PageView.Current(); 8 var recaptchaSvc = DependencyResolver.Current.GetService<Huuskes.Core.Services.Abstract.IRecaptchaService>(); 9 var recaptchaSiteKey = recaptchaSvc?.GetSiteKey(); 10 var recaptchaEnabled = recaptchaSvc?.IsEnabled() ?? false; 11 var captchaQuery = System.Web.HttpContext.Current.Request.QueryString["captcha"]; 12 bool captchaFailed = string.Equals(captchaQuery, "false", StringComparison.OrdinalIgnoreCase); 13 string formCssClass = GetString("Form.CssClass"); 14 string formSystemFields = GetString("Form.SystemFields"); 15 bool formLabelBold = GetBoolean("Form.LabelBold"); 16 bool formLabelOverField = GetBoolean("Form.LabelOverField"); 17 string formId = GetString("Form.HtmlId"); 18 string formOnSubmit = MailHelper.FixTargetPageID(GetString("Form.OnSubmit"), pageView); 19 string formSpamScript = GetString("Form.SpamScript"); 20 string formAction = GetString("Form.Action"); 21 int formColumnShiftFormFieldID = GetInteger("Form.ColumnShiftFormFieldID"); 22 string formLabelRequired = GetString("Form.LabelRequired"); 23 if (string.IsNullOrWhiteSpace(formLabelRequired)) 24 { 25 formLabelRequired = "<span>*</span>"; 26 } 27 int formMaxSubmits = GetInteger("Form.MaxSubmits"); 28 int formSubmitCount = GetInteger("Form.SubmitCount"); 29 string[] showInlineFieldTypes = { "CheckBox", "CheckBoxList", "Radio" }; 30 var participantIdValue = System.Web.HttpContext.Current.Request.QueryString.Get(Translate("WinActionParticipantId", "deelnemer")) ?? ""; 31 32 if (captchaFailed) 33 { 34 <div class="dw-form-captcha-failed alert alert-warning area-red" role="alert" style="color: #721c24; background-color: #f8d7da; border-color: #f5c6cb; position: relative; padding: .75rem 1.25rem; margin-bottom: 1rem; border: 1px solid transparent; border-radius: .25rem;"> 35 @Translate("InvalidCaptcha", "De captcha is niet geldig, het formulier is niet verzonden.") 36 </div> 37 } 38 39 if (formMaxSubmits > 0 && formSubmitCount >= formMaxSubmits) 40 { 41 @GetString("Form.MaxSubmitsReachedText") 42 } 43 else 44 { 45 int.TryParse(GetGlobalValue("Global:Page.ID"), out int pageId); 46 var action = WinActionHelper.GetActionItemByPageId(pageId); 47 var onlyOne = false; 48 if (action != null && action.SystemName.Equals(Huuskes.Items.Constants.ItemConstants.Page_HuuskesWinActionPage)) 49 { 50 onlyOne = ItemHelper.GetItemValue<bool>(action, "OnlyOneVotePerParticipantPerEmailAddress"); 51 } 52 var sumbitButtonId = ""; 53 54 <form method="post" action="@formAction" enctype="multipart/form-data" class="@formCssClass" id="@formId" onsubmit="@formOnSubmit"> 55 @formSystemFields 56 @if (recaptchaEnabled) 57 { 58 <input type="hidden" name="g-recaptcha-response" id="g-recaptcha-response" value="" /> 59 } 60 @foreach (LoopItem field in GetLoop("Fields")) 61 { 62 int fieldId = field.GetInteger("Field.ID"); 63 string fieldHtmlId = field.GetString("Field.HtmlId"); 64 string fieldName = Translate(string.Format("Form_{0}", field.GetString("Field.Name").Replace(" ", "_")), field.GetString("Field.Name")); 65 string fieldControl = field.GetString("Field.Control"); 66 string fieldType = field.GetString("Field.Type"); 67 bool showInline = showInlineFieldTypes.Contains(fieldType); 68 bool fieldIsButton = field.GetBoolean("Field.IsButton"); 69 bool fieldIsOther = field.GetBoolean("Field.IsOther"); 70 bool fieldRequired = field.GetBoolean("Field.Required"); 71 string cssClass = field.GetString("Field.CssClass"); 72 73 if (fieldType == "TextInput" || 74 fieldType == "Email" || 75 fieldType == "Tel" || 76 fieldType == "Date") 77 { 78 var inputType = fieldType.Equals("TextInput") ? "text" : fieldType.ToLower(); 79 80 var textInputPlaceholderText = field.GetString("Field.Placeholder"); 81 if (string.IsNullOrWhiteSpace(textInputPlaceholderText) && !formLabelOverField && !showInline) 82 { 83 textInputPlaceholderText = field.GetString("Field.Name"); 84 } 85 if (!string.IsNullOrWhiteSpace(textInputPlaceholderText)) 86 { 87 textInputPlaceholderText = textInputPlaceholderText.HtmlRemove().Replace(" ", "_"); 88 } 89 textInputPlaceholderText = Translate(string.Format("Form_Label_{0}", textInputPlaceholderText), textInputPlaceholderText); 90 if (field.GetBoolean("Field.Required") && !formLabelOverField && !showInline) 91 { 92 textInputPlaceholderText += "*"; 93 } 94 95 var textInputPlaceholder = !string.IsNullOrWhiteSpace(textInputPlaceholderText) ? string.Format(" placeholder=\"{0}\"", textInputPlaceholderText) : ""; 96 var textInputRequired = field.GetBoolean("Field.Required") ? " required=\"required\"" : ""; 97 98 var maxLength = "50"; 99 if (fieldType == "Email") 100 { 101 maxLength = "225"; 102 } 103 104 string textInput = string.Format("<input type=\"{3}\" id=\"{0}\" name=\"{0}\"{1} {2} class=\"{4}\" maxlength=\"{5}\" />", 105 field.GetString("Field.Name"), 106 textInputPlaceholder, 107 textInputRequired, 108 inputType, 109 cssClass, 110 maxLength); 111 fieldControl = textInput; 112 } 113 else if (fieldType == "Select") // take option texts from translations 114 { 115 var selectRequired = field.GetBoolean("Field.Required") ? " required=\"required\"" : ""; 116 string select = string.Format("<div class=\"select-wrapper\"><span class=\"caret\"></span><select id=\"{0}\" name=\"{0}\"{1}>", 117 fieldHtmlId, 118 selectRequired); 119 select += string.Format("<option value=\"\">{0}</option>", fieldName); 120 foreach (LoopItem option in field.GetLoop("Options")) 121 { 122 var selectText = Translate(string.Format("Form_{0}_{1}", fieldHtmlId, option.GetString("Option.Text").Replace(" ", "_")), option.GetString("Option.Text")); 123 select += string.Format("<option value=\"{0}\">{1}</option>", 124 option.GetString("Option.Value"), 125 selectText); 126 } 127 select += "</select></div>"; 128 fieldControl = select; 129 } 130 else if (fieldType == "Textarea") // take placeholder text from translations 131 { 132 var textAreaPlaceholderText = field.GetString("Field.Placeholder"); 133 if (string.IsNullOrWhiteSpace(textAreaPlaceholderText) && !formLabelOverField && !showInline) 134 { 135 textAreaPlaceholderText = field.GetString("Field.Name"); 136 } 137 if (!string.IsNullOrWhiteSpace(textAreaPlaceholderText)) 138 { 139 textAreaPlaceholderText = textAreaPlaceholderText.HtmlRemove().Replace(" ", "_"); 140 } 141 textAreaPlaceholderText = Translate(string.Format("Form_Label_{0}", textAreaPlaceholderText), field.GetString("Field.Placeholder")); 142 if (field.GetBoolean("Field.Required") && !formLabelOverField && !showInline) 143 { 144 textAreaPlaceholderText += "*"; 145 } 146 147 var textAreaPlaceholder = !string.IsNullOrWhiteSpace(textAreaPlaceholderText) ? string.Format(" placeholder=\"{0}\"", textAreaPlaceholderText) : ""; 148 var textAreaRequired = field.GetBoolean("Field.Required") ? " required=\"required\"" : ""; 149 string textArea = string.Format("<textarea rows=\"0\" id=\"{0}\" name=\"{0}\"{1}{2}></textarea>", 150 fieldHtmlId, 151 textAreaPlaceholder, 152 textAreaRequired); 153 fieldControl = textArea; 154 } 155 else if (fieldType == "File") 156 { 157 var fileSelectorRequired = field.GetBoolean("Field.Required") ? " required=\"required\"" : ""; 158 string fileSelectorButtonText = Translate(string.Format("Form_FileButton_{0}", field.GetString("Field.Name").HtmlRemove().Replace(" ", "")), field.GetString("Field.Name")); 159 string fileSelector = string.Format("<label class=\"custom-file-upload\"><input type=\"file\" id=\"{0}\" name=\"{0}\" multiple=\"\" {2} />{1}</label>", fieldHtmlId, fileSelectorButtonText, fileSelectorRequired); 160 fieldControl = fileSelector; 161 } 162 string fieldDescription = field.GetString("Field.Description"); 163 if (!string.IsNullOrWhiteSpace(fieldDescription)) 164 { 165 fieldDescription = string.Format("<br /><span class=\"description\">{0}</span>", fieldDescription); 166 } 167 168 169 string requiredImage = string.Empty; 170 if (fieldRequired && !string.IsNullOrEmpty(formLabelRequired)) 171 { 172 requiredImage = formLabelRequired.Contains(".") ? string.Format("<img src=\"/Files/images/{0}\">", formLabelRequired) : formLabelRequired; 173 } 174 175 176 // DEFINE LABEL AND CONTROLCLASS 177 var labelClass = formLabelOverField ? "label label-clear" : "label"; 178 var controlClass = formLabelOverField ? "control control-clear" : "control"; 179 if (showInline) 180 { 181 labelClass += " show-inline"; 182 controlClass += " show-inline"; 183 } 184 185 if (formLabelBold) 186 { 187 labelClass += " text-bold"; 188 } 189 190 //HIDDEN INPUTS 191 if (fieldType.Equals("Hidden", StringComparison.InvariantCultureIgnoreCase)) 192 { 193 <text>@fieldControl</text> 194 } // EMPTY FIELD TO ALIGN FIELD PROPERLY 195 else if (field.GetString("Field.Name") == "Spacer") 196 { 197 <div class="spacer hidden-phone"></div> 198 } // CHECKBOX 199 else if (fieldType == "CheckBox") 200 { 201 string fieldActivityDescription = field.GetString("Field.Activity.Description"); 202 if (!string.IsNullOrEmpty(fieldActivityDescription)) 203 { 204 // CREATE CONSENT LABEL 205 206 // general conditions replace 207 fieldName = Huuskes.Repository.Helpers.HtmlHelper.ReplaceTagWithLink( 208 Dynamicweb.Frontend.PageView.Current(), 209 fieldActivityDescription, 210 "{general-conditions}", 211 Translate("general-conditions", "general conditions"), 212 Huuskes.Models.Constants.StringConstants.NavigationTags.GeneralConditions, 213 "_blank" 214 ); 215 216 // job applicants general conditions replace 217 fieldName = Huuskes.Repository.Helpers.HtmlHelper.ReplaceTagWithLink( 218 Dynamicweb.Frontend.PageView.Current(), 219 fieldActivityDescription, 220 "{privacy-statement}", 221 Translate("privacy-statement", "privacy-statement"), 222 Huuskes.Models.Constants.StringConstants.NavigationTags.PrivacyStatement, 223 "_blank" 224 ); 225 226 // job applicants general conditions replace 227 fieldName = Huuskes.Repository.Helpers.HtmlHelper.ReplaceTagWithLink( 228 Dynamicweb.Frontend.PageView.Current(), 229 fieldActivityDescription, 230 "{privacy-statement-for-applications}", 231 Translate("privacy-statement-for-applications", "privacy-statement for applications"), 232 Huuskes.Models.Constants.StringConstants.NavigationTags.PrivacyStatementForApplications, 233 "_blank" 234 ); 235 236 // remove surrounding paragraph tags 237 fieldName = fieldName.Replace("<p>", "").Replace("</p>", ""); 238 239 } 240 <div class="form-group flex flex-align-center checkbox"> 241 @fieldControl 242 <label for="@fieldHtmlId"> 243 <span class="circle"></span> 244 <span class="flex flex-wrap flex-align-center"> 245 246 @fieldName @(fieldRequired ? "*" : "") 247 </span> 248 </label> 249 </div> 250 } // RADIO AND CHECKBOXLIST 251 else if (fieldType == "Radio" || fieldType == "CheckBoxList") 252 { 253 var listType = fieldType == "CheckBoxList" ? "checkbox" : "radio"; 254 <div class="form-group @fieldType.ToLower()"> 255 <label for="@fieldHtmlId"> 256 <p>@fieldName @(fieldRequired ? "*" : "")</p> 257 </label> 258 @foreach (LoopItem option in field.GetLoop("Options")) 259 { 260 var inputId = string.Concat(fieldHtmlId, option.GetInteger("Option.ID")); 261 <div class="checkbox flex"> 262 <input type="@listType" 263 id="@inputId" 264 name="@fieldHtmlId" 265 value="@option.GetString("Option.Value")" 266 @(fieldRequired && fieldType == "Radio" && option.Index == 1 ? "required " : "") 267 @(option.GetBoolean("Option.DefaultSelected") ? "checked " : "") /> 268 <label for="@inputId"> 269 <span class="circle"></span> 270 @Translate(string.Format("FormsForEditor_{0}", option.GetString("Option.Text")), option.GetString("Option.Text")) 271 </label> 272 </div> 273 } 274 </div> 275 } 276 else if (fieldType == "Submit") // SUBMIT 277 { 278 sumbitButtonId = $"VIS_{fieldHtmlId}"; 279 <div class="form-group @fieldType.ToLower()"> 280 <div class="@labelClass"></div> 281 <div class="@controlClass"> 282 <input type="submit" id="@fieldHtmlId" name="@fieldHtmlId" value="@fieldName" class="hidden"> 283 <input type="button" id="@sumbitButtonId" name="@sumbitButtonId" value="@fieldName" class="button"> 284 </div> 285 </div> 286 } // ALL OTHER INPUTS 287 else 288 { 289 <div class="form-group @fieldType.ToLower()"> 290 <div class="@labelClass"> 291 @if (!fieldIsButton && !fieldIsOther) 292 { 293 <label for="@fieldHtmlId" class="theme-color">@fieldName @requiredImage</label> 294 } 295 else if (fieldIsOther) 296 { 297 @fieldName 298 } 299 </div> 300 <div class="@controlClass">@fieldControl @fieldDescription</div> 301 </div> 302 } 303 } 304 </form> 305 306 @SnippetStart("JavaScriptBottom") 307 @if (recaptchaEnabled) 308 { 309 <script src="https://www.google.com/recaptcha/api.js?render=@recaptchaSiteKey"></script> 310 } 311 <script> 312 $(document).ready(function () { 313 314 //todo: before submit check if participant has already participated .... 315 var submittingVote = false; 316 var formCssClass = ".@formCssClass.Replace(" ", ".")"; 317 318 // init 319 WinAction.FormInit(formCssClass); 320 321 // fill hidden fields 322 WinAction.FillHiddenFields('@GetGlobalValue("Global:Page.ID")','@participantIdValue', '@pageView.Area.Culture'); 323 324 // on change validate 325 $("input[type=text], input[type=email], input[type=tel], input[type=date], input[type=file], textarea", formCssClass).on("keyup", function () { 326 WinAction.FormValidate(formCssClass); 327 }); 328 $("input[type=radio], input[type=checkbox], select, input[type=text], input[type=email], input[type=tel], input[type=date], input[type=file], textarea", formCssClass).on("change", function () { 329 WinAction.FormValidate(formCssClass); 330 }); 331 332 // Init datepicker 333 $(".huuskesDatepicker").datepicker({ 334 dateFormat: "dd-mm-yy" 335 }); 336 337 // Fix Dates 338 if ($(".hasDatepicker", formCssClass)[0]) { 339 Form.ShowDatePlaceholder(formCssClass); 340 } 341 342 // Only numbers in telephone fields 343 $("input[type=tel]").numeric(); 344 345 @if (onlyOne) { 346 var pageService = new Dynamicweb.Content.PageService(); 347 var votesFeedPage = pageService.GetPageByNavigationTag(Dynamicweb.Frontend.PageView.Current().AreaID, Huuskes.Models.Constants.StringConstants.NavigationTags.WinActionVotesFeed); 348 var votesFeedPageId = votesFeedPage?.ID ?? 0; 349 <text> 350 $("#@sumbitButtonId").off("click").on("click", function (e) { 351 352 if (!submittingVote) { 353 354 submittingVote = true; 355 var formId = '@formId'; 356 var votesFeedPageId = '@votesFeedPageId'; 357 var actionPageId = '@GetGlobalValue("Global:Page.ID")'; 358 var participantId = '@participantIdValue'; 359 var emailAddress = $("input[type=email]", "#" + formId).val(); 360 var feedPageUrl = "/Default.aspx?ID=" + votesFeedPageId + "&action=" + actionPageId + "&participantid=" + participantId + "&emailaddress=" + emailAddress; 361 362 $.getJSON(feedPageUrl) 363 .done(function (result, status, metaData) { 364 if (result !== null && result.length > 0) { 365 alert('@Translate("WinAction_MultipleVotesError", "Email already exist")'); 366 } else { 367 $("#" + formId).submit(); 368 } 369 }).fail(function (jqxhr, textStatus, error) { 370 var err = textStatus + ", " + error; 371 console.error("Submit form failed: " + err); 372 }).always(function () { 373 submittingVote = false; 374 }); 375 } 376 377 378 }); 379 </text> 380 } 381 @if (recaptchaEnabled) 382 { 383 <text> 384 // reCAPTCHA v3 form submission interception 385 $(formCssClass).on('submit', function (e) { 386 var form = this; 387 var tokenField = form.querySelector('#g-recaptcha-response'); 388 if (tokenField && !tokenField.value) { 389 e.preventDefault(); 390 grecaptcha.ready(function () { 391 grecaptcha.execute('@recaptchaSiteKey', { action: 'contact_form' }).then(function (token) { 392 tokenField.value = token; 393 form.submit(); 394 }); 395 }); 396 } 397 }); 398 </text> 399 } 400 401 }); 402 </script> 403 @SnippetEnd("JavaScriptBottom") 404 } 405 }