我有最奇怪的问题!
我创建了一个名为UserProfiles的表:
CREATE TABLE UserProfiles
(
[Id] INT NOT NULL PRIMARY KEY,
[UserId] NVARCHAR(128) NULL,
[Email] NCHAR(10) NULL,
[DateCreated] DATETIME2 NULL,
[LastModified] DATETIME2 NULL,
[FirstName] NVARCHAR(50) NULL,
[LastName] NVARCHAR(50) NULL,
CONSTRAINT [FK_UserProfiles_AspNetUsers] FOREIGN KEY (UserId) REFERENCES [AspNetUsers](Id)
)
并将所有列复制到名为UserProfile的类中:
public class UserProfile
{
[Key]
[Required]
[HiddenInput(DisplayValue = false)]
public int Id { get; set; }
[Required]
[HiddenInput(DisplayValue = false)]
//[Association("AspNetUser", "UserId", "UserId")]
public string UserId { get; set; } // Link with AspNetUsers user entry
[DataType(DataType.EmailAddress)]
public string Email { get; set; }
[DataType(DataType.DateTime)]
public DateTime DateCreated { get; set; }
[DataType(DataType.DateTime)]
public DateTime LastModified { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
我设置了一个EFDbContext类:
class EFDbContext : DbContext
{
public DbSet<UserProfile> UserProfiles { get; set; }
}
我为新的个人资料功能设置了一些编辑页面和控制器...... 最后,当我以注册用户身份登录并访问UserProfile / Edit页面时,我现在可以填写信息,当我点击保存时,它会调用context.SaveChanges()。
当我重新扫描页面时,所有信息仍然存在,尽管url现在已经获得了查询参数,其中包含了我的所有个人资料详细信息......那就是废话,但我认为我的数据库必须存在问题这是信息的来源...... 但没有 ...如果我删除查询参数并刷新页面,我仍然会收到信息填写我的userprofile的编辑字段...
所以我想,哇它第一次工作。 COOLBEANS!我看着我的数据库都很激动..然后在我创建的UserProfiles表中找到 NO ENTRY?
那么这个数据存储在哪里才能重新调用?!?!?!
我想也许创建的数据库是一个红色的鲱鱼,并且infact实体巧妙地在一个单独的数据库中设置了一个新表,但我的web.config另有说明:
<connectionStrings>
<add name="DefaultConnection" connectionString="Data Source=(LocalDb)\v11.0;AttachDbFilename=|DataDirectory|\aspnet-James.WebUI-20131114020024.mdf;Initial Catalog=aspnet-James.WebUI-20131114020024;Integrated Security=True" providerName="System.Data.SqlClient" />
</connectionStrings>
所以我的问题是。如果数据没有存储在我漂亮的数据库中,那么它究竟存储在哪里?
额外信息
UserProfileRepository:
public class EFUserProfileRepository : IUserProfileRepository
{
private EFDbContext context = new EFDbContext();
public IEnumerable<UserProfile> UserProfiles { get { return context.UserProfiles; } }
public void SaveUserProfile(UserProfile userProfile)
{
if (userProfile.Id == 0)
{
userProfile.DateCreated = DateTime.Now;
userProfile.LastModified = DateTime.Now;
context.UserProfiles.Add(userProfile);
}
else
{
UserProfile dbEntry = context.UserProfiles.Find(userProfile.Id);
if (dbEntry != null)
{
dbEntry.Id = userProfile.Id;
dbEntry.UserId = userProfile.UserId;
dbEntry.LastModified = DateTime.Now;
dbEntry.DateCreated = userProfile.DateCreated;
dbEntry.Email = userProfile.Email;
dbEntry.FirstName = userProfile.FirstName;
dbEntry.LastName = userProfile.LastName;
}
}
context.SaveChanges();
}
public UserProfile DeleteUserProfile(int userProfileId)
{
UserProfile dbEntry = context.UserProfiles.Find(userProfileId);
if (dbEntry != null)
{
context.UserProfiles.Remove(dbEntry);
context.SaveChanges();
}
return dbEntry;
}
}
UserProfileController
public class UserProfileController : Controller
{
private IUserProfileRepository repository = new EFUserProfileRepository(); // Remove this when Unity implemented
public UserProfileController(/*IUserProfileRepository repo*/)
{
//repository = repo;
}
public ActionResult Index()
{
UserProfile userProfile = repository.UserProfiles.FirstOrDefault(uP => uP.UserId == User.Identity.GetUserId());
if(userProfile == null)
{
return RedirectToAction("Create");
}
else
{
return RedirectToAction("Edit", userProfile);
}
}
public ViewResult Edit()
{
UserProfile userProfile = repository.UserProfiles.FirstOrDefault(uP => uP.UserId == User.Identity.GetUserId());
return View(userProfile);
}
[HttpPost]
public ActionResult Edit(UserProfile userProfile)
{
if (ModelState.IsValid)
{
repository.SaveUserProfile(userProfile);
TempData["Message"] = "The Profile has been succesfully edited";
return RedirectToAction("Index");
}
else
{
return View();
}
}
public ViewResult Create()
{
return View("Edit", new UserProfile { UserId = User.Identity.GetUserId() });
}
}
数据源=(LocalDb)\ v11.0; AttachDbFilename =“C:\ Users \ James \ Documents \ Visual Studio 2013 \ Projects \ James \ James.WebUI \ App_Data \ aspnet-James.WebUI-20131114020024.mdf” ;初始目录= aspnet-James.WebUI-20131114020024;集成安全性=真
-------------实际网站--------------
访问它时的UserProfile / Edit页面现在将我带到URL:
...localhost:53417/UserProfile/Edit/4?UserId=********&Email=********&DateCreated=11%2F14%2F2013%2012%3A56%3A19&LastModified=11%2F14%2F2013%2013%3A07%3A05&FirstName=Jimmy&LastName=Trusler
所以显而易见的细节会来自这里......但是当我删除那组查询参数时,页面仍会在刷新后呈现信息。
...localhost:53417/UserProfile/Edit
答案 0 :(得分:1)
您正在填充的网页有点像红色鲱鱼 - 真正的问题是您的数据实际上从未保存到数据库中 - 您的表格查看器确认了这一点。如果使用开发人员工具检查网络活动,您可能会发现服务器没有数据。
表单信息可能由浏览器本地存储(例如本地存储/ cookie),并在刷新页面时重新填充,以便出现,就像从服务器中提取数据一样 - 但是它不是:)