为什么我的局部视图在 ASP.NET 带有 EDMX 模型的 MVC4 中没有显示任何内容
Why is my Partial View is not Showing anything in ASP.NET MVC4 with EDMX model
我在部分视图中显示数据库的结果时遇到问题,而由于上一个问题发布的信息不显示,我没有收到任何错误。我尝试使用 viewbags 查看页面的其他元素是否显示不成功。然而,我实现的搜索栏功能确实显示了这使得它更加混乱。
模型属性取自另一个项目的 edmx 模型,该模型通过两个项目都连接到的数据库访问。
我的目标是让局部视图在主页索引页面上显示数据库的信息,并包括搜索功能(我相信这是有效的,但我不知道直到我有局部视图显示。看到因为我没有得到返回的错误,所以我之前的问题基本上得到了回答,对于任何遇到同样问题的人都会从这个问题的两种解决方案中受益。
由于我的能力,我已将其缩小到可能的选项,这是有待商榷的。 PatientProfile 和 PatientListViewModel 未 called/referenced edmx 模型。
我不确定是否可以在同一个视图中使用多个表 F2FDataEntities(.edmx 模型)所以我创建了一个列表模型(PatientProfile)和一个视图模型(PatientlistViewModel)
HomeController.cs
using FaceToFaceWebsite.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Data.Entity;
using System.Web;
using System.Web.Mvc;
using PagedList;
using System.Web.UI;
using System.Configuration;
using System.Collections;
namespace FaceToFaceWebsite.Controllers
{
public class HomeController : Controller
{
public F2FDataEntities _db = new F2FDataEntities();
public ActionResult Index(string searchTerm = null, int page = 1)
{
var viewModel = new PatientListViewModel();
viewModel.PatientProfile = new List<PatientProfile>();
if (Request.IsAjaxRequest())
{
return PartialView("_Patient", viewModel);
}
return View(viewModel);
}
public ActionResult About()
{
ViewBag.Message = "Your app description page.";
return View();
}
public ActionResult Patients()
{
ViewBag.Message = "";
return View();
}
public ActionResult Help()
{
ViewBag.Message = "";
return View();
}
public ActionResult Contact()
{
ViewBag.Message = "Contact Us";
return View();
}
protected override void Dispose(bool disposing)
{
if (_db != null)
{
_db.Dispose();
}
base.Dispose(disposing);
}
}
}
PatientListViewModel.cs(型号)
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Collections;
using System;
using System.Collections.Generic;
using System.Text;
using System.Reflection;
using System.Data.Entity;
namespace FaceToFaceWebsite.Models
{
public class PatientListViewModel
{
public List<PatientProfile> PatientProfile { get; set; }
}
public class Patient
{
public IEnumerable<User> UserID { get; set; }
public IEnumerable<User> CodeName { get; set; }
public IEnumerable<Device> Name { get; set; }
public IEnumerable<Session> ReachedFinish { get; set; }
}
}
PatientProfile.cs(型号)
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Data.Entity;
using System.Linq;
using System.Web;
namespace FaceToFaceWebsite.Models
{
public class PatientProfile : DbContext
{
public PatientProfile() : base("F2FDataEntities")
{
}
public IEnumerable<User> UserID { get; set; }
public IEnumerable<User> CodeName { get; set; }
public IEnumerable<Device> Name { get; set; }
public IEnumerable<Session> ReachedFinish { get; set; }
}
}
Views/Home/Index.cshtml
@model FaceToFaceWebsite.Models.PatientListViewModel
@{
ViewBag.Title = "Home Page";
}
@using(Ajax.BeginForm(
new AjaxOptions{
HttpMethod="get",
InsertionMode=InsertionMode.Replace,
UpdateTargetId="patientList"}))
{
<input type="search" name="searchTerm" />
<input type="submit" value="Search By Name" />
}
@Html.Partial("~/Views/Shared/_Patient.cshtml", Model.PatientProfile)
<form method="get" action="@Url.Action("Index")" data-f2fw-ajax="true" data-f2fw-target="#patientList">
<input type="text" name="searchTerm" data-f2fw-autocomplete="@Url.Action("Autocomplete")" />
<input type="submit" value="Search By Name" />
</form>
Views/Shared/_Patient.cshtml(部分视图)
@model List<PatientProfile>
@foreach (var item in Model)
{
<div>
<h4>UserID: @item.CodeName</h4>
<span>Finished: @item.ReachedFinish</span>
<p>Machine: @item.Name</p>
<hr />
</div>
}
感谢您花时间阅读本文,我对 MVC 和实体还比较陌生,所以如果错误很愚蠢,我深表歉意。
-更新-
我添加了行
viewModel.PatientProfile = _db.PatientProfiles;
到家庭控制器,并在
中生成了一个属性存根
F2FData.Context.cs(在F2FData.edmx里面,然后在F2FData.Context.tt里面)
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated from a template.
//
// Manual changes to this file may cause unexpected behavior in your application.
// Manual changes to this file will be overwritten if the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace FaceToFaceWebsite.Models
{
using System;
using System.Data.Entity;
using System.Data.Entity.Infrastructure;
public partial class F2FDataEntities : DbContext
{
public F2FDataEntities()
: base("name=F2FDataEntities")
{
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
throw new UnintentionalCodeFirstException();
}
public DbSet<C__MigrationHistory> C__MigrationHistory { get; set; }
public DbSet<Device> Devices { get; set; }
public DbSet<Exercis> Exercises { get; set; }
public DbSet<PoseChannel> PoseChannels { get; set; }
public DbSet<Pos> Poses { get; set; }
public DbSet<RegimeItem> RegimeItems { get; set; }
public DbSet<ScreenInteractionsEntry> ScreenInteractionsEntries { get; set; }
public DbSet<SessionExercis> SessionExercises { get; set; }
public DbSet<Session> Sessions { get; set; }
public DbSet<User> Users { get; set; }
public System.Collections.Generic.List<PatientProfile> PatientProfiles { get; set; }
}
}
但是视图仍然没有显示。
您没有从数据库加载任何内容。您创建了一个新的视图模型实例,并且只分配了空列表,这意味着视图模型是空的,视图中没有任何内容可显示。在那种情况下你不会得到错误。
应该是这样的。
var viewModel = new PatientListViewModel();
viewModel.PatientProfile = _db.PatientProfiles;
return View(viewModel);
注意到我们如何从数据库中检索患者和资料了吗?
我认为您没有为列表提供任何要循环的值。
我在这里看到您创建了一个新的视图模型实体和一个新列表,但除非我遗漏了什么,否则该列表永远不会 填充
var viewModel = new PatientListViewModel();
viewModel.PatientProfile = new List<PatientProfile>();
在此行之后,请确保为列表提供一些实际信息以在您的局部视图中循环,否则将不显示任何内容。
我通常会添加以下内容:
viewmodel.PatientProfile = _db.Example......(get a list, or values from database)
我在部分视图中显示数据库的结果时遇到问题,而由于上一个问题发布的信息不显示,我没有收到任何错误。我尝试使用 viewbags 查看页面的其他元素是否显示不成功。然而,我实现的搜索栏功能确实显示了这使得它更加混乱。
模型属性取自另一个项目的 edmx 模型,该模型通过两个项目都连接到的数据库访问。
我的目标是让局部视图在主页索引页面上显示数据库的信息,并包括搜索功能(我相信这是有效的,但我不知道直到我有局部视图显示。看到因为我没有得到返回的错误,所以我之前的问题基本上得到了回答,对于任何遇到同样问题的人都会从这个问题的两种解决方案中受益。
由于我的能力,我已将其缩小到可能的选项,这是有待商榷的。 PatientProfile 和 PatientListViewModel 未 called/referenced edmx 模型。
我不确定是否可以在同一个视图中使用多个表 F2FDataEntities(.edmx 模型)所以我创建了一个列表模型(PatientProfile)和一个视图模型(PatientlistViewModel)
HomeController.cs
using FaceToFaceWebsite.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Data.Entity;
using System.Web;
using System.Web.Mvc;
using PagedList;
using System.Web.UI;
using System.Configuration;
using System.Collections;
namespace FaceToFaceWebsite.Controllers
{
public class HomeController : Controller
{
public F2FDataEntities _db = new F2FDataEntities();
public ActionResult Index(string searchTerm = null, int page = 1)
{
var viewModel = new PatientListViewModel();
viewModel.PatientProfile = new List<PatientProfile>();
if (Request.IsAjaxRequest())
{
return PartialView("_Patient", viewModel);
}
return View(viewModel);
}
public ActionResult About()
{
ViewBag.Message = "Your app description page.";
return View();
}
public ActionResult Patients()
{
ViewBag.Message = "";
return View();
}
public ActionResult Help()
{
ViewBag.Message = "";
return View();
}
public ActionResult Contact()
{
ViewBag.Message = "Contact Us";
return View();
}
protected override void Dispose(bool disposing)
{
if (_db != null)
{
_db.Dispose();
}
base.Dispose(disposing);
}
}
}
PatientListViewModel.cs(型号)
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Collections;
using System;
using System.Collections.Generic;
using System.Text;
using System.Reflection;
using System.Data.Entity;
namespace FaceToFaceWebsite.Models
{
public class PatientListViewModel
{
public List<PatientProfile> PatientProfile { get; set; }
}
public class Patient
{
public IEnumerable<User> UserID { get; set; }
public IEnumerable<User> CodeName { get; set; }
public IEnumerable<Device> Name { get; set; }
public IEnumerable<Session> ReachedFinish { get; set; }
}
}
PatientProfile.cs(型号)
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Data.Entity;
using System.Linq;
using System.Web;
namespace FaceToFaceWebsite.Models
{
public class PatientProfile : DbContext
{
public PatientProfile() : base("F2FDataEntities")
{
}
public IEnumerable<User> UserID { get; set; }
public IEnumerable<User> CodeName { get; set; }
public IEnumerable<Device> Name { get; set; }
public IEnumerable<Session> ReachedFinish { get; set; }
}
}
Views/Home/Index.cshtml
@model FaceToFaceWebsite.Models.PatientListViewModel
@{
ViewBag.Title = "Home Page";
}
@using(Ajax.BeginForm(
new AjaxOptions{
HttpMethod="get",
InsertionMode=InsertionMode.Replace,
UpdateTargetId="patientList"}))
{
<input type="search" name="searchTerm" />
<input type="submit" value="Search By Name" />
}
@Html.Partial("~/Views/Shared/_Patient.cshtml", Model.PatientProfile)
<form method="get" action="@Url.Action("Index")" data-f2fw-ajax="true" data-f2fw-target="#patientList">
<input type="text" name="searchTerm" data-f2fw-autocomplete="@Url.Action("Autocomplete")" />
<input type="submit" value="Search By Name" />
</form>
Views/Shared/_Patient.cshtml(部分视图)
@model List<PatientProfile>
@foreach (var item in Model)
{
<div>
<h4>UserID: @item.CodeName</h4>
<span>Finished: @item.ReachedFinish</span>
<p>Machine: @item.Name</p>
<hr />
</div>
}
感谢您花时间阅读本文,我对 MVC 和实体还比较陌生,所以如果错误很愚蠢,我深表歉意。
-更新-
我添加了行
viewModel.PatientProfile = _db.PatientProfiles;
到家庭控制器,并在
中生成了一个属性存根F2FData.Context.cs(在F2FData.edmx里面,然后在F2FData.Context.tt里面)
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated from a template.
//
// Manual changes to this file may cause unexpected behavior in your application.
// Manual changes to this file will be overwritten if the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace FaceToFaceWebsite.Models
{
using System;
using System.Data.Entity;
using System.Data.Entity.Infrastructure;
public partial class F2FDataEntities : DbContext
{
public F2FDataEntities()
: base("name=F2FDataEntities")
{
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
throw new UnintentionalCodeFirstException();
}
public DbSet<C__MigrationHistory> C__MigrationHistory { get; set; }
public DbSet<Device> Devices { get; set; }
public DbSet<Exercis> Exercises { get; set; }
public DbSet<PoseChannel> PoseChannels { get; set; }
public DbSet<Pos> Poses { get; set; }
public DbSet<RegimeItem> RegimeItems { get; set; }
public DbSet<ScreenInteractionsEntry> ScreenInteractionsEntries { get; set; }
public DbSet<SessionExercis> SessionExercises { get; set; }
public DbSet<Session> Sessions { get; set; }
public DbSet<User> Users { get; set; }
public System.Collections.Generic.List<PatientProfile> PatientProfiles { get; set; }
}
}
但是视图仍然没有显示。
您没有从数据库加载任何内容。您创建了一个新的视图模型实例,并且只分配了空列表,这意味着视图模型是空的,视图中没有任何内容可显示。在那种情况下你不会得到错误。
应该是这样的。
var viewModel = new PatientListViewModel();
viewModel.PatientProfile = _db.PatientProfiles;
return View(viewModel);
注意到我们如何从数据库中检索患者和资料了吗?
我认为您没有为列表提供任何要循环的值。
我在这里看到您创建了一个新的视图模型实体和一个新列表,但除非我遗漏了什么,否则该列表永远不会 填充
var viewModel = new PatientListViewModel();
viewModel.PatientProfile = new List<PatientProfile>();
在此行之后,请确保为列表提供一些实际信息以在您的局部视图中循环,否则将不显示任何内容。
我通常会添加以下内容:
viewmodel.PatientProfile = _db.Example......(get a list, or values from database)