我有一个带有Entity Framework 6的简单ASP.Net MVC应用程序。

我有两个表:一个“联系人”列表(包含姓名,地址和电话号码),另一个表记录了每个联系人的零个或多个“注释”历史记录:

型号/Contact.cs:

   public class Contact
    {
        [Key]
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public int ContactId { get; set; }
        public string Name { get; set; }
        public string EMail { get; set; }
        public string Phone1 { get; set; }
        ...
        public virtual List<Note> Notes { get; set; }
    }


型号/Note.cs:

public class Note
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int NoteId { get; set; }
    public string Text { get; set; }
    [DatabaseGenerated(DatabaseGeneratedOption.Computed)]
    public DateTime? Date { get; set; }
    [ForeignKey("Contact")]
    public int ContactId { get; set; }
    public virtual Contact Contact { get; set; }
}


我在Visual Studio中做了一个“添加控制器”,它会自动生成“ ContactsController.cs”和“ Index.cshtml”,“ Details.cshtml”,“ Edit.cshtml”和“ Delete.cshtml”的视图。所有自动生成的代码看起来都不错,并且运行良好。但是它没有显示任何“注释”。

通过将以下内容添加到“ Details.cshtml”和“ Edit.cshtml”,我能够显示“注释”并添加指向“编辑或删除注释”的链接:

视图/联系人/Edit.cshtml:

@model ContactsApp.Models.Contact
...
<h4>Notes</h4>
<table class="table">
    <tr>
        <th>Date</th>
        <th>Note</th>
        <th>&nbsp;</th>
    </tr>

    @for (int i = 0; i < Model.Notes.Count(); i++)
    {
        <tr>
            <td>@Html.DisplayFor(model => model.Notes[i].Date)</td>
            <td>@Html.DisplayFor(model => model.Notes[i].Text)</td>
            <td>
                @Html.ActionLink("Edit Note", "EditNote", new { noteId = Model.Notes[i].NoteId }) |
                @Html.ActionLink("Delete Note", "DeleteNote", new { noteId = Model.Notes[i].NoteId })
            </td>
        </tr>
    }
</table>


我还创建了一个“ EditNote.cshtml”视图...但是我无法弄清楚如何从ContactsController调用它:

控制器/ContactsController.cs:

   // GET: Contacts/EditNote?noteId=3
    public async Task<ActionResult> EditNote(int? noteId)
    {
        if (noteId == null)
        {
            return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
        }
        Note note = await db.Contacts.Where(c => c.Notes.noteId == noteId);
        if (note == null)
        {
            return HttpNotFound();
        }
        return View(note);
    }


问:什么是正确的ASP.Net MV语法,以获取“注释”并将其传递给“ EditNote”视图?

最佳答案

您正在返回联系人。

您应该查询笔记并使用FirstOrDefault。

db.Notes.Where(n=> n.NoteId =id).FirstOrDefault();


如果您想通过ID和注释ID从联系人中进行选择以提高效率,请尝试Using LINQ, select list of objects inside another list of objects

关于c# - EF6:如何在列表中搜索项目?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58910066/

10-13 00:49