public ActionResult Index(string urlName)
        {
            var model = new JobProfileSearchBoxViewModel
            {
                PlaceholderText                     = PlaceholderText,
                HeaderText                          = HeaderText,
                TotalResultsMessage                 = NoResultsMessage,
                JobProfileUrl                       = new Uri(urlName, UriKind.RelativeOrAbsolute),
                AutoCompleteMinimumCharacters       = AutoCompleteMinimumCharacters,
                AutoCompleteMaximumCharacters       = AutoCompleteMaximumCharacters,
                MaximumNumberOfDisplayedSuggestions = MaximumNumberOfDisplayedSuggestions,
                UseFuzzyAutoCompleteMatching        = UseFuzzyAutoCompleteMatching
            };

            return(View("JobProfile", model));
        }
        public ActionResult Search(string searchTerm, string jobProfileUrl)
        {
            if (!string.IsNullOrWhiteSpace(searchTerm))
            {
                return(Redirect($"{SearchResultsPage}?searchTerm={GetUrlEncodedString(searchTerm)}"));
            }

            switch (CurrentPageMode)
            {
            case SearchWidgetPageMode.SearchResults:
                var searchModel = new JobProfileSearchResultViewModel
                {
                    PlaceholderText = PlaceholderText,
                    AutoCompleteMinimumCharacters       = AutoCompleteMinimumCharacters,
                    AutoCompleteMaximumCharacters       = AutoCompleteMaximumCharacters,
                    MaximumNumberOfDisplayedSuggestions = MaximumNumberOfDisplayedSuggestions,
                    UseFuzzyAutoCompleteMatching        = UseFuzzyAutoCompleteMatching,
                    SalaryBlankText = SalaryBlankText
                };
                return(View("SearchResult", searchModel));

            case SearchWidgetPageMode.JobProfile:
                bool isValidUrl = this.webAppContext.IsValidAndFormattedUrl($"{JobProfileDetailsPage}{jobProfileUrl}/");
                return(isValidUrl
                            ? (ActionResult) new RedirectResult($"{JobProfileDetailsPage}{jobProfileUrl}")
                            : HttpNotFound());

            default:
                var model = new JobProfileSearchBoxViewModel
                {
                    PlaceholderText = PlaceholderText,
                    AutoCompleteMinimumCharacters       = AutoCompleteMinimumCharacters,
                    AutoCompleteMaximumCharacters       = AutoCompleteMaximumCharacters,
                    MaximumNumberOfDisplayedSuggestions = MaximumNumberOfDisplayedSuggestions,
                    UseFuzzyAutoCompleteMatching        = UseFuzzyAutoCompleteMatching
                };
                return(View("Index", model));
            }
        }
        public void DFC1330ForSearchBoxonJobProfilePage()
        {
            // Arrange
            var indexView       = new _MVC_Views_JobProfileSearchBox_JobProfile_cshtml();
            var headerText      = nameof(JobProfileSearchBoxController.HeaderText);
            var jobProfileUrl   = nameof(JobProfileSearchBoxViewModel.JobProfileUrl);
            var placeholderText = nameof(JobProfileSearchBoxController.PlaceholderText);

            var model = new JobProfileSearchBoxViewModel
            {
                HeaderText      = headerText,
                JobProfileUrl   = new Uri(jobProfileUrl, UriKind.RelativeOrAbsolute),
                PlaceholderText = placeholderText
            };

            // Act
            var htmlDom = indexView.RenderAsHtml(model);

            // Asserts
            GetHeaderText(htmlDom).Should().Be(headerText);
            GetJobProfileUrlText(htmlDom).Should().Be(jobProfileUrl);
            GetPlaceholderText(htmlDom).Should().Be(placeholderText);
        }
        public ActionResult Index(string searchTerm, int page = 1)
        {
            switch (CurrentPageMode)
            {
            case SearchWidgetPageMode.SearchResults:
                //Damn!!!! Sitefinity doesnt support Async await
                //https://feedback.telerik.com/Project/153/Feedback/Details/165662-mvc-ability-to-use-async-actions-in-mvc-widgets
                return(asyncHelper.Synchronise(() => DisplaySearchResultsAsync(searchTerm, page)));

            case SearchWidgetPageMode.Landing:
            default:
                var model = new JobProfileSearchBoxViewModel
                {
                    PlaceholderText                     = PlaceholderText,
                    TotalResultsMessage                 = NoResultsMessage,
                    AutoCompleteMinimumCharacters       = AutoCompleteMinimumCharacters,
                    AutoCompleteMaximumCharacters       = AutoCompleteMaximumCharacters,
                    MaximumNumberOfDisplayedSuggestions = MaximumNumberOfDisplayedSuggestions,
                    UseFuzzyAutoCompleteMatching        = UseFuzzyAutoCompleteMatching
                };
                return(View("Index", model));
            }
        }