Модель Sitecore MVC потеряна после обратной передачи

У меня есть страница/регистрация, которая содержит две формы.

Один для регистрации и один для входа в систему. Форма регистрации — это рендеринг одного контроллера, форма входа — это рендеринг другого контроллера.

Когда я загружаю/регистрация, страница загружается правильно, и модель заполняется.

Когда я нажимаю кнопку отправки, срабатывает действие Post, и модель внезапно возвращается к состоянию по умолчанию. Разве модель не должна оставаться заполненной без необходимости ее повторного заполнения?

Моя модель:

using Glass.Mapper.Sc.Configuration;
using Glass.Mapper.Sc.Configuration.Attributes;
using Sitecore.Data.Items;
using Sitecore.Mvc.Presentation;
using System;
using System.Collections.Generic;

namespace MySite.Models.Items
{

    public class Registration: IRenderingModel
    {
        public Registration()
        {
            FirstName = string.Empty;
            LastName = string.Empty;
            Email = string.Empty;
            JobTitle = string.Empty;
            Company = string.Empty;
            Industry = string.Empty;
            SubIndustry = string.Empty;
            RevenueRange = string.Empty;
            Country = string.Empty;
            StateProvince = string.Empty;
            MarketoTracking = string.Empty;
            ReturnUrl = string.Empty;
        }

        public Rendering Rendering { get; set; }
        public Item Item { get; set; }
        public Item PageItem { get; set; }

        public string FirstName { get; set; }
        public string LastName { get; set; }
        public string Email { get; set; }
        public string JobTitle { get; set; }
        public string Company { get; set; }
        public string Industry { get; set; }
        public string SubIndustry { get; set; }
        public string RevenueRange { get; set; }
        public string Country { get; set; }
        public string StateProvince { get; set; }
        public string MarketoTracking { get; set; }
        public string ReturnUrl { get; set; }


        #region "Country List"
        public IEnumerable<CountryChildItem> CountryList { get; set; }
        public string CountryChildMenu { get; set; }

        [SitecoreType(AutoMap = true)]
        public class CountryItem
        {
            public virtual IEnumerable<CountryChildItem> Children { get; set; }
        }

        [SitecoreType(AutoMap = true)]
        public class CountryChildItem
        {
            [SitecoreId]
            public virtual Guid Id { get; set; }

            [SitecoreInfo(SitecoreInfoType.Path)]
            public virtual string Path { get; set; }

            [SitecoreField]
            public virtual string DisplayName { get; set; }

            [SitecoreField]
            public virtual string Abbreviation { get; set; }

            [SitecoreField]
            public virtual string SortOrder { get; set; }
        }
        #endregion



        #region "State / Province List"
        public IEnumerable<StateProvinceChildItem> StateProvinceList { get; set; }

        public class StateProvinceItem
        {
            public virtual IEnumerable<StateProvinceChildItem> Children { get; set; }
        }

        [SitecoreType(AutoMap = true)]
        public class StateProvinceChildItem
        {
            [SitecoreId]
            public virtual Guid Id { get; set; }

            [SitecoreInfo(SitecoreInfoType.Path)]
            public virtual string Path { get; set; }

            [SitecoreField]
            public virtual string DisplayName { get; set; }

            [SitecoreField]
            public virtual string Abbreviation { get; set; }

            [SitecoreField]
            public virtual string ParentCountry { get; set; }

            [SitecoreField]
            public virtual string SortOrder { get; set; }
        }
        #endregion



        #region "Industry List"
        public IEnumerable<IndustryChildItem> IndustryList { get; set; }
        public string IndustryChildMenu { get; set; }


        public class IndustryItem
        {
            public virtual IEnumerable<IndustryChildItem> Children { get; set; }
        }

        [SitecoreType(AutoMap = true)]
        public class IndustryChildItem
        {
            [SitecoreId]
            public virtual Guid Id { get; set; }

            [SitecoreInfo(SitecoreInfoType.Path)]
            public virtual string Path { get; set; }

            [SitecoreField]
            public virtual string DisplayName { get; set; }

            [SitecoreField]
            public virtual string SortOrder { get; set; }
        }
        #endregion



        #region "Sub-industry List"
        public IEnumerable<SubIndustryChildItem> SubIndustryList { get; set; }

        public class SubIndustryItem
        {
            public virtual IEnumerable<SubIndustryChildItem> Children { get; set; }
        }

        [SitecoreType(AutoMap = true)]
        public class SubIndustryChildItem
        {
            [SitecoreId]
            public virtual Guid Id { get; set; }

            [SitecoreInfo(SitecoreInfoType.Path)]
            public virtual string Path { get; set; }

            [SitecoreField]
            public virtual string DisplayName { get; set; }

            [SitecoreField]
            public virtual string ParentIndustry { get; set; }

            [SitecoreField]
            public virtual string SortOrder { get; set; }
        }
        #endregion



        #region "Revenue List"
        public IEnumerable<RevenueChildItem> RevenueList { get; set; }

        public class RevenueItem
        {
            public virtual IEnumerable<RevenueChildItem> Children { get; set; }
        }

        [SitecoreType(AutoMap = true)]
        public class RevenueChildItem
        {
            [SitecoreId]
            public virtual Guid Id { get; set; }

            [SitecoreInfo(SitecoreInfoType.Path)]
            public virtual string Path { get; set; }

            [SitecoreField]
            public virtual string DisplayName { get; set; }

            [SitecoreField]
            public virtual string SortOrder { get; set; }
        }
        #endregion



        public void Initialize(Rendering rendering)
        {
            Rendering = rendering;
            Item = rendering.Item;
            PageItem = PageContext.Current.Item;
        }
    }
}

Мой взгляд:

using Glass.Mapper.Sc;
using MySite.Analytics;
using MySite.Models.Items;
using Newtonsoft.Json.Linq;
using Sitecore.Diagnostics;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web.Mvc;

namespace MySite.Presentation.Controllers
{
    public class RegistrationController : AsyncController
        {

        Registration registration = new Registration();

        [HttpGet]
        public PartialViewResult Index(string view)
            {
            if (!string.IsNullOrWhiteSpace(view))
            {
                registration.ReturnUrl = view.Trim();
            }
            if (string.IsNullOrEmpty(registration.ReturnUrl) && Request.UrlReferrer != null)
            {
                registration.ReturnUrl = Server.UrlDecode(Request.UrlReferrer.AbsoluteUri ?? string.Empty);
            }
            PopulateLists();
            return PartialView(registration);
        }


        [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult Index(string RegistrationButton, FormCollection formCollection)
        {
            if (!string.IsNullOrEmpty(RegistrationButton))
            {
                try
                {
                    registration.FirstName = formCollection["FirstName"].Trim();
                    registration.LastName = formCollection["LastName"].Trim();
                    registration.Email = formCollection["Email"].Trim();
                    registration.JobTitle = formCollection["JobTitle"].Trim();
                    registration.Company = formCollection["Company"].Trim();
                    registration.Industry = formCollection["Industry"].Trim();
                    registration.SubIndustry = formCollection["SubIndustry"].Trim();
                    registration.RevenueRange = formCollection["RevenueRange"].Trim();
                    registration.Country = formCollection["Country"].Trim();
                    registration.StateProvince = formCollection["StateProvince"].Trim();
                    registration.MarketoTracking = formCollection["_mkt_trk"].Trim();
                    ContactManagement contactManagement = new ContactManagement();
                    contactManagement.RegisterContact(registration);
                }
                catch (Exception ex)
                {
                    Log.Error("MySite.Presentation.Controllers.RegistrationController.Index", ex, this);
                }
            }
            return PartialView();
        }


        public void PopulateLists()
        {
            ISitecoreContext sitecoreContext = new SitecoreContext();
            ISitecoreService service = new SitecoreService(sitecoreContext.Database);

            Guid countryItemID = new Guid("{2FB5AE2D-E80D-4A3D-9201-3E62E781EFCD}");
            Registration.CountryItem countryItem = service.GetItem<Registration.CountryItem>(countryItemID);
            registration.CountryList = countryItem.Children.OrderBy(l => System.Convert.ToInt32(l.SortOrder)).ThenBy(l => l.DisplayName);

            Guid stateProvinceItemID = new Guid("{6171F149-0200-4010-BF5F-5F32EAAE31B4}");
            Registration.StateProvinceItem stateProvinceItem = service.GetItem<Registration.StateProvinceItem>(stateProvinceItemID);
            registration.StateProvinceList = stateProvinceItem.Children.OrderBy(l => System.Convert.ToInt32(l.SortOrder)).ThenBy(l => l.DisplayName);

            Guid industryItemID = new Guid("{ACD77146-0530-4EEE-A477-BF8CD54B9FFE}");
            Registration.IndustryItem industryItem = service.GetItem<Registration.IndustryItem>(industryItemID);
            registration.IndustryList = industryItem.Children.OrderBy(l => System.Convert.ToInt32(l.SortOrder)).ThenBy(l => l.DisplayName);

            Guid subIndustryItemID = new Guid("{43AAABDF-9591-4F03-9894-0EAEFD1292B3}");
            Registration.SubIndustryItem subIndustryItem = service.GetItem<Registration.SubIndustryItem>(subIndustryItemID);
            registration.SubIndustryList = subIndustryItem.Children.OrderBy(l => System.Convert.ToInt32(l.SortOrder)).ThenBy(l => l.DisplayName);

            Guid revenueItemID = new Guid("{86C0FF05-5A9C-4113-BEE6-B68E19BAAB37}");
            Registration.RevenueItem revenueItem = service.GetItem<Registration.RevenueItem>(revenueItemID);
            registration.RevenueList = revenueItem.Children.OrderBy(l => System.Convert.ToInt32(l.SortOrder)).ThenBy(l => l.DisplayName);
        }


        public string GetChildList(string countryDisplayName, IEnumerable<Registration.StateProvinceChildItem> stateProvinceChildItem)
        {
            string menuString = string.Empty;
            if (stateProvinceChildItem != null)
            {
                JArray menuArray = new JArray();
                foreach (var state in stateProvinceChildItem)
                {
                    if (state.ParentCountry == countryDisplayName)
                    {
                        JValue menuItem = new JValue("{\"name\": \"" + state.DisplayName + " (" + state.Abbreviation + ")\", \"value\": \"" + state.Abbreviation + "\"}");
                        menuArray.Add(menuItem);
                    }
                }
                if (menuArray.Count > 0)
                {
                    menuString = "data-child-menu='{\"items\": " + menuArray.ToString() + "}'";
                }
            }
            return menuString;
        }


        public string GetChildList(string industryId, IEnumerable<Registration.SubIndustryChildItem> subIndustryChildItem)
        {
            string menuString = string.Empty;
            if (subIndustryChildItem != null)
            {
                JArray menuArray = new JArray();
                foreach (var subIndustry in subIndustryChildItem)
                {
                    if (subIndustry.ParentIndustry.Trim().ToUpperInvariant().Contains(industryId.Trim().ToUpperInvariant()))
                    {
                        JValue menuItem = new JValue("{\"name\": \"" + subIndustry.DisplayName + "\", \"value\": \"" + subIndustry.DisplayName + "\"}");
                        menuArray.Add(menuItem);
                    }
                }
                if (menuArray.Count > 0)
                {
                    menuString = @"data-child-menu='{""items"": " + menuArray.ToString() + "}'";
                }
            }
            return menuString;
        }

    }
}

person eat-sleep-code    schedule 28.09.2015    source источник
comment
В настоящее время существует проблема с несколькими представлениями на одной странице с Sitecore MVC. Вы можете обратиться к этой статье для более подробного описания проблемы и возможных решений - blog.horizontalintegration.com/2015/09/25/ . (Я видел, что у вас также есть httpGet для действия по умолчанию)   -  person nsgocev    schedule 29.09.2015
comment
Я проголосовал за ваш комментарий. Это решило проблему.   -  person eat-sleep-code    schedule 29.09.2015
comment
добавлено как ответ :)   -  person nsgocev    schedule 29.09.2015


Ответы (1)


В настоящее время существует проблема с Sitecore MVC и наличием нескольких форм. Я считаю, что проблема в том, что вы установили [HttpGet] для действия индекса, что может испортить маршрутизацию Sitecore. Вы можете проверить наличие других проблем с несколькими формами в этом сообщении в блоге< /а>.

person nsgocev    schedule 29.09.2015