简体   繁体   English

ASP.NET MVC 4 Kendo网格-属性上的ForeignKeyAttribute无效

[英]ASP.NET MVC 4 Kendo Grid - ForeignKeyAttribute on property is not valid

I am trying to navigate through a table in order to display the text value instead of the id and I get this error: 我试图在一个表中导航以显示文本值而不是id,但出现此错误:

An exception of type 'System.InvalidOperationException' occurred in EntityFramework.dll but was not handled in user code EntityFramework.dll中发生类型'System.InvalidOperationException'的异常,但未在用户代码中处理

Additional information: The ForeignKeyAttribute on property 'languageId' on type 'DevelopmentNotesProject.Models.NoteForm' is not valid. 附加信息:类型为'DevelopmentNotesProject.Models.NoteForm'的属性'languageId'上的ForeignKeyAttribute无效。 The navigation property 'Language' was not found on the dependent type 'DevelopmentNotesProject.Models.NoteForm'. 在依赖类型“ DevelopmentNotesProject.Models.NoteForm”上找不到导航属性“ Language”。 The Name value should be a valid navigation property name. Name值应为有效的导航属性名称。

It's been some hours that I've been trying to solve the problem in vain ... Thanks a lot for your time This is my code: 我已经花了几个小时徒劳地试图解决问题……非常感谢您的时间,这是我的代码:

View: 视图:

@using Kendo.Mvc.UI
@model DevelopmentNotesProject.Models.NoteForm

@{
    ViewBag.Title = "Index";
}


<script type="text/javascript">
    function formatter(value) {
        return value.substring(0, 50);
    }
</script>


<section id="listing">
    <h2>My Notes</h2>

        @(Html.Kendo().Grid<DevelopmentNotesProject.Models.NoteForm>()
        .Name("grid")
        .Columns(columns =>
        {
            columns.Bound(c => c.Title).Width(200).ClientTemplate(string.Format("{0}...", "#= formatter(Title) #"));
            columns.Bound(c => c.Text).Width(450).ClientTemplate(string.Format("{0}...", "#= formatter(Text) #"));
            columns.ForeignKey(p => p.languageId, (System.Collections.IEnumerable)ViewData["lang"], "Id", "Name").Title("Language").Width(100);
            columns.Command(command => { command.Edit(); command.Destroy(); });

        })
        .HtmlAttributes(new { style = "height: 380px;" })
        .Scrollable()
        .Groupable()
        .Sortable()
        .Pageable(pageable => pageable
            .Refresh(true)
            .PageSizes(true)
            .ButtonCount(5))
         .DataSource(dataSource => dataSource // Configure the grid data source
                  .Ajax() // Specify that ajax binding is used
                  .Read(read => read.Action("Notes_Read", "MyNotes")) // Set the action method which will return the data in JSON format
                  .Destroy(update => update.Action("Notes_Destroy", "MyNotes"))
                  .Update(update => update.Action("Notes_Update", "MyNotes"))
                  .Model(model => 
                      {
                          model.Id(p => p.id);
                      })
               )
         .Selectable()
        )



  </section>

@Html.ActionLink("Add a new note", "Add", "MyNotes")

 @section Scripts {
        @Scripts.Render("~/bundles/jqueryval")
    }

Controller: 控制器:

public ActionResult Index()
{
    var dbo = new UsersContext();
    ViewData["lang"] = dbo.Language.Select(b => new { Id = b.id, Name = b.lang });
    return View();
}

Model: 模型:

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Data.Entity;
using System.Globalization;
using System.Web.Security;

namespace DevelopmentNotesProject.Models
{
    public class UsersContext : DbContext
    {
        public UsersContext()
            : base("DefaultConnection")
        {
        }

        public DbSet<UserProfile> UserProfiles { get; set; }
        public DbSet<Language> Language { get; set; }
        public DbSet<NoteForm> Note { get; set; }
    }

    [Table("note")]
    public class NoteForm
    {
        [Required]
        [StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)]
        [Display(Name = "Title")]
        public string Title { get; set; }

        [Required]
        [Display(Name = "Text")]
        public string Text { get; set; }

        [Required]
        [Display(Name = "Language")]
        [ForeignKey("Language")]
        public int languageId { get; set; }

        [Key]
        public int id { get; set; }

        public int userId { get; set; }

    }
    [Table("Language")]
    public class Language
    {
        public string lang { get; set; }

        [Key]
        public int id { get; set; }
    }

}

You need to configure the relationship between NoteForm and Language models. 您需要配置NoteForm和语言模型之间的关系。

 [Required]
 [Display(Name = "Language")]
 public int languageId { get; set; }

 [ForeignKey("languageId ")]
 public Language Language { get; set; }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM