Использование CheckBoxFor с таблицей поиска SQL

Я новичок в MVC, и я пытаюсь создать список флажков для моих данных. У меня есть 3 таблицы:

CREATE TABLE [dbo].[Competency] (
    [Id]           INT          IDENTITY (1, 1) NOT NULL,
    [Icon]         VARCHAR (5)  NOT NULL,
    [Description]  VARCHAR (50),
    PRIMARY KEY CLUSTERED ([Id] ASC)
);
CREATE TABLE [dbo].[User] (
    [Id]           INT          IDENTITY (1, 1) NOT NULL,
    [Name]         VARCHAR (50)  NOT NULL,
    PRIMARY KEY CLUSTERED ([Id] ASC)
);
CREATE TABLE [dbo].[UserCompetency] (
    [UserId]       INT NOT NULL,
    [CompetencyId] INT NOT NULL,
    PRIMARY KEY CLUSTERED ([UserId] ASC, [CompetencyId] ASC),
    CONSTRAINT [FK_UserCompetency_ToCompetency] FOREIGN KEY ([CompetencyId]) REFERENCES [dbo].[Competency] ([Id]),
    CONSTRAINT [FK_UserCompetency_ToUser] FOREIGN KEY ([UserId]) REFERENCES [dbo].[User] ([Id])
);

Итак, у меня есть список компетенций и пользователей, и у каждого пользователя может быть ноль или более этих компетенций.

EntityFramework создал мой класс User следующим образом:

public partial class User
{
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
    public User()
    {
        this.Competencies = new HashSet<Competency>();
    }

    public int Id { get; set; }
    public string Name { get; set; }

    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
    public virtual ICollection<Competency> Competencies { get; set; }
}

В MVC и Razor я пытаюсь создать CheckBoxList, чтобы пользователь мог выбирать, какие компетенции подходят для каждого пользователя. Пользователь Create.cshtml содержит этот код:

@foreach(Competency comp in Competencies)
{
    @Html.CheckBoxFor(model => model.Competencies.Contains(comp))
    @Html.DisplayFor(model => comp.Icon, new { Title = comp.Description })
}

Я получаю ошибку:

Templates can be used only with field access, property access, single-dimension array index, or single-parameter custom indexer expressions.

на линии с CheckBoxFor.

Я понимаю, что использование CheckboxFor должно быть связано с логическим полем в модели, которого у меня нет, так как это получение данных из справочной таблицы.

Я хотел бы избежать изменения модели, созданной EntityFramework, потому что тогда всякий раз, когда она обновляется, я должен был бы помнить, чтобы повторно внести изменения.

Кто-нибудь знает, как я могу заставить CheckBoxFor работать при обращении к справочной таблице, которая не связана с изменением моей модели?

0 ответов

Другие вопросы по тегам