У меня возникли некоторые проблемы, связанные с моим начальным уровнем понимания C # и ООП.Но я не смог понять, что я делаю неправильно, выполнив поиск ответов.
Моя модель - KeyVisualBlock.cs:
[Display(Order = 90,
GroupName = SystemTabNames.Content)]
[AllowedTypes(typeof(FormContainerBlock))]
public virtual ContentReference ContactForm { get; set; }
Мой контроллер - KeyVisualBlockController.cs:
using System.Web.Mvc;
using Example.Site.Models.Blocks;
using Example.Site.Models.Pages;
using Example.Site.Models.ViewModels;
using EPiServer;
using EPiServer.ServiceLocation;
using EPiServer.Web;
using EPiServer.Web.Mvc;
namespace Example.Site.Controllers
{
public class KeyVisualBlockController : BlockController<KeyVisualBlock>
{
public override ActionResult Index(KeyVisualBlock currentBlock)
{
var contentLoader = ServiceLocator.Current.GetInstance<IContentLoader>();
var startPage = contentLoader.Get<StartPage>(SiteDefinition.Current.StartPage);
KeyVisualBlockViewModel model = new KeyVisualBlockViewModel
{
SearchLink = startPage.SearchPageLink,
CurrentKeyVisualBlock = currentBlock
};
return PartialView("KeyVisualBlock", model);
}
}
public class KeyContactBlockController : BlockController<ContactBlock>
{
public override ActionResult Index(ContactBlock currentBlock)
{
ContactBlockViewModel model = new ContactBlockViewModel(currentBlock);
return PartialView("~/Views/Shared/Blocks/ContactBlock.cshtml", model);
}
}
}
My View Модель:
using Example.Site.Models.Blocks;
using EPiServer;
using EPiServer.Core;
using EPiServer.Forms.Implementation.Elements;
using EPiServer.ServiceLocation;
using System;
namespace Example.Site.Models.ViewModels
{
public class KeyVisualBlockViewModel
{
public PageReference SearchLink { get; set; }
public KeyVisualBlock CurrentKeyVisualBlock { get; set; }
}
public class KeyContactBlockViewModel
{
public KeyContactBlockViewModel(ContactBlock KeycurrentBlock)
{
IContentLoader contentLoader = ServiceLocator.Current.GetInstance<IContentLoader>();
this.KeyCurrentBlock = KeycurrentBlock;
if (!ContentReference.IsNullOrEmpty(this.KeyCurrentBlock.ContactForm))
{
this.ContactFormID = contentLoader.Get<FormContainerBlock>(this.KeyCurrentBlock.ContactForm)?.Form?.FormGuid;
}
}
public ContactBlock KeyCurrentBlock { get; set; }
public Guid? ContactFormID { get; set; }
}
}
И, наконец, мой View:
<header>
<h2 id="@(string.Format("formWrapperHeader_{0}", Model.ContactFormID))"
data-header-success-message="@Model.KeyCurrentBlock.SuccessHeadline">
@Html.PropertyFor(x => x.KeyCurrentBlock.Headline)
</h2>
</header>
Я получаю следующую ошибку:
KeyVisualBlockViewModel не содержит определения для KeyCurrentBlock и нет доступного метода расширения KeyCurrentBlock, принимающего первый аргумент типа «KeyVisualBlockViewModel» (вы пропустили директиву using или ссылку на сборку?)
То, что я пытаюсь сделать, это добавить возможность включать форму в наш KeyVisualBlock, чтобы наши редакторы могли включать формы в разделы заголовка страницы.