【问题标题】:Details View is displaying “System.Data.Entity.DynamicProxies详细信息视图显示“System.Data.Entity.DynamicProxies
【发布时间】:2015-07-21 00:00:13
【问题描述】:

我不知道如何解决这个问题,有问题,请帮忙!

问题是:

传入字典的模型项的类型为“System.Data.Entity.DynamicProxies.Student_0C394DD28745C7061A0EB9964A9FAD1A77E5EB1B24F61D61E2229472BCC850EE”,但此字典需要“ContosoUniversity.ViewModels.DetailsViewModel”类型的模型项。

StudentController:

public ActionResult Details(int? id)
        {
            if (id == null)
            {
                return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
            }
            Student student = _db.Students.Include(m => m.Comments).SingleOrDefault(x => x.ID == id);
            if (student == null)
            {
                return HttpNotFound();
            }

            var model = new DetailsViewModel
            {
                Comment = new Comment(),
                Student = student,
                Comments = student.Comments.OrderBy(c => c.Id).ToList()
            };

            return View(student);
        }

查看:

@model ContosoUniversity.ViewModels.DetailsViewModel

@{
    ViewBag.Title = "Details";
}

<h2>Details</h2>

<div>
    <h4>Student</h4>
    <hr />
    <dl class="dl-horizontal">
        <dt>
            @Html.DisplayNameFor(model => model.Student.LastName)
        </dt>

        <dd>
            @Html.DisplayFor(model => model.Student.LastName)
        </dd>

        <dt>
            @Html.DisplayNameFor(model => model.Student.FirstMidName)
        </dt>

        <dd>
            @Html.DisplayFor(model => model.Student.FirstMidName)
        </dd>

        <dt>
            @Html.DisplayNameFor(model => model.Student.EnrollmentDate)
        </dt>

        <dd>
            @Html.DisplayFor(model => model.Student.EnrollmentDate)
        </dd>
        <dt>
            @Html.DisplayNameFor(model => model.Student.Enrollments)
        </dt>
        <dd>
            <table class="table">
                <tr>
                    <th>Course Title</th>
                    <th>Grade</th>
                </tr>
                @foreach (var item in Model.Enrollments)
                    {
                        <tr>
                            <td>
                                 @Html.DisplayFor(modelItem => item.Course.Title)
                            </td>
                            <td>
                                 @Html.DisplayFor(modelItem => item.Grade)
                            </td>
                        </tr>
                     }
             </table> 
        </dd>
    </dl>


        <div class="form-horizontal">
            <h4>Movie</h4>
            <hr />
            @Html.ValidationSummary(true)

            <input type="hidden" value="@Model.Comment.Id" name="commentId" />

            <div class="form-group">
                @Html.LabelFor(model => model.Comment.Name, htmlAttributes: new { @class = "control-label col-md-2" })
                <div class="col-md-10">
                    @Html.EditorFor(model => model.Comment.Name)
                    @Html.ValidationMessageFor(model => model.Comment.Name)
                </div>
            </div>

            @Html.ValidationSummary(true)
            <div class="form-group">
                @Html.LabelFor(model => model.Comment.Email, htmlAttributes: new { @class = "control-label col-md-2" })
                <div class="col-md-10">
                    @Html.EditorFor(model => model.Comment.Email)
                    @Html.ValidationMessageFor(model => model.Comment.Email)
                </div>
            </div>

            @Html.ValidationSummary(true)
            <div class="form-group">
                @Html.LabelFor(model => model.Comment.Text, htmlAttributes: new { @class = "control-label col-md-2" })
                <div class="col-md-10">
                    @Html.EditorFor(model => model.Comment.Text)
                    @Html.ValidationMessageFor(model => model.Comment.Text)
                </div>
            </div>

            <div class="form-group">
                <div class="col-md-offset-2 col-md-10">
                    <input type="submit" value="Create" class="btn btn-default" />
                </div>
            </div>
        </div>
    }

    <div id="comments">
        @foreach (var c in Model.Comments)
        {
            @Html.Partial("_Comment", c)
        }
    </div>

</div>
<p>
    @Html.ActionLink("Edit", "Edit", new { id = Model.Student.ID }) |
    @Html.ActionLink("Back to List", "Index")
</p>

DetailsViewModel:

public Student Student { get; set; }
    public List<Comment> Comments { get; set; }
    public Comment Comment { get; set; }

    public virtual ICollection<Enrollment> Enrollments { get; set; }

评论模型:

public int Id { get; set; }

    public int CommentId { get; set; }
    public Student Student { get; set; }

    [Required]
    public string Name { get; set; }

    [EmailAddress]
    public string Email { get; set; }

    [Required]
    public string Text { get; set; }

学生模型:

public int ID { get; set; }

    public string LastName { get; set; }
    public string FirstMidName { get; set; }
    public DateTime EnrollmentDate { get; set; }

    public string FullName
    {
        get
        {
            return string.Join(" ", FirstMidName, LastName);
        }
    }

    public virtual ICollection<Enrollment> Enrollments { get; set; }

    public List<Comment> Comments { get; set; }

如果有人不理解,我正在尝试在带有部分视图的详细信息页面上添加评论列表。

【问题讨论】:

  • 错误消息准确地说明了问题所在。再看一遍(忽略十六进制字符串),然后查看Details 操作方法中的最后一行。

标签: asp.net-mvc-4 razor


【解决方案1】:

您正在尝试将学生对象传递给您定义它将处理的对象的视图,即:@model ContosoUniversity.ViewModels.DetailsViewModel

您需要在控制器中向视图传递一个 DetailsViewModel,或者您必须重新考虑您正在做什么/需要做什么,并让视图处理对象 Student。

我不知道这个模型在哪里,但类似于:

@model ContosoUniversity.Models.Student 

【讨论】:

    【解决方案2】:

    假设您的共享视图文件夹中有一个名为 _Comment.cshtml 的 DisplayTemplates 文件夹(即 /Views/Shared/DisplayTemplates/_Comment.cshtml 之类的路径),您应该尝试以下操作:

    1. 将 _Comment.cshtml 重命名为 Comment.cshtml
    2. 替换以下内容:

      <div id="comments">
         @foreach (var c in Model.Comments)
         {
             @Html.Partial("_Comment", c)
         }
       </div>
      

    以下内容:

    @Html.DisplayFor(model => model.Comments)
    

    我自己只是在解决这个问题,文件名中的下划线是破坏性的。

    【讨论】:

      猜你喜欢
      • 2014-02-12
      • 1970-01-01
      • 2016-07-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多