Используя Kentico 12 MVC, я создал пользовательскую таблицу для хранения информации, используемой для заполнения раскрывающегося списка в моем представлении.
Она называется MyCustom.Tables и добавила поля «ProgramName» и «ProgramID»с соответствующей информацией
Как я могу передать их на мой взгляд?Я попытался в моем контроллере:
IEnumerable<ProgramList> allPrograms = CustomTableItemProvider.GetItems<ProgramList>("MyCustom.Tables");
, а затем, на мой взгляд:
@Html.DropDownListFor(m => m.Data.ProgramSelected, new SelectList(Model.Data.AllPrograms, "ProgramID", "ProgramName"), "- Please Select -", new { @class = "browser-default" })
со следующей моделью
public class ProgramList
{
public string ProgramID { get; set; }
public string ProgramName { get; set; }
}
Но я получаю ошибку вконтроллер (нет перегрузки для метода GetItems принимать 1 аргумент) ...
Я также пытался изменить контроллер на
IEnumerable allPrograms = CustomTableItemProvider.GetItems("MyCustom.Tables");
Но мои настраиваемые поля из моей пользовательской таблицы не доступны в этомcase только поле ItemID по умолчанию Kentico.
Есть идеи?
S.
######################### EDIT
Iдобавили следующий код, сгенерированный Kentico:
using System;
using System.Collections.Generic;
using CMS;
using CMS.Base;
using CMS.Helpers;
using CMS.DataEngine;
using CMS.CustomTables.Types.MySite;
using CMS.CustomTables;
[assembly: RegisterCustomTable(ProgramsItem.CLASS_NAME, typeof(ProgramsItem))]
namespace CMS.CustomTables.Types.MySite
{
/// <summary>
/// Represents a content item of type ProgramsItem.
/// </summary>
public partial class ProgramsItem : CustomTableItem
{
#region "Constants and variables"
/// <summary>
/// The name of the data class.
/// </summary>
public const string CLASS_NAME = "MySite.Programs";
/// <summary>
/// The instance of the class that provides extended API for working with ProgramsItem fields.
/// </summary>
private readonly ProgramsItemFields mFields;
#endregion
#region "Properties"
/// <summary>
/// Name.
/// </summary>
[DatabaseField]
public string ProgramName
{
get
{
return ValidationHelper.GetString(GetValue("ProgramName"), @"");
}
set
{
SetValue("ProgramName", value);
}
}
/// <summary>
/// Gets an object that provides extended API for working with ProgramsItem fields.
/// </summary>
[RegisterProperty]
public ProgramsItemFields Fields
{
get
{
return mFields;
}
}
/// <summary>
/// Provides extended API for working with ProgramsItem fields.
/// </summary>
[RegisterAllProperties]
public partial class ProgramsItemFields : AbstractHierarchicalObject<ProgramsItemFields>
{
/// <summary>
/// The content item of type ProgramsItem that is a target of the extended API.
/// </summary>
private readonly ProgramsItem mInstance;
/// <summary>
/// Initializes a new instance of the <see cref="ProgramsItemFields" /> class with the specified content item of type ProgramsItem.
/// </summary>
/// <param name="instance">The content item of type ProgramsItem that is a target of the extended API.</param>
public ProgramsItemFields(ProgramsItem instance)
{
mInstance = instance;
}
/// <summary>
/// Name.
/// </summary>
public string ProgramName
{
get
{
return mInstance.ProgramName;
}
set
{
mInstance.ProgramName = value;
}
}
}
#endregion
#region "Constructors"
/// <summary>
/// Initializes a new instance of the <see cref="ProgramsItem" /> class.
/// </summary>
public ProgramsItem() : base(CLASS_NAME)
{
mFields = new ProgramsItemFields(this);
}
#endregion
}
}
и попробовали следующий код https://docs.kentico.com/k12/developing-websites/retrieving-content-in-mvc-applications, но в настоящее время он не работает:
IEnumerable<ProgramsItem> allPrograms = CustomTableItemProvider.GetItems<ProgramsItem>();
ProgramsItem item = CustomTableItemProvider.GetItem<ProgramsItem>(1);
Например, приведенный выше пункт возвращает ноль, пока у меня есть записи в моих пользовательских таблицах.
На основе https://www.bizstream.com/blog/may-2019/powerful-kentico-custom-table-visualization Я также пытался
IEnumerable<ProgramList> GetAllPrograms = CustomTableItemProvider.GetItems<ProgramsItem>()
.Select(program => new ProgramList
{
ProgramName = program.ProgramName
});
, но получаю снова:
Невозможно привести объект типа 'CMS.CustomTables.CustomTableItem' к типу 'CMS.CustomTables.Types.MySite.ProgramsItem'.
Спасибо