asp.net – MVC 4 – 在局部视图中使用不同的模型
请忍受我的noobness,我是MVC模式的超新人。
我想做什么 我在我的网站上为注册用户建立个人资料信息页面。该页面将列出用户的数据,例如出生日期,电话号码,订阅状态等。您可以获得想法。我还希望有一个表单让用户在同一页面上更改他们的密码,电子邮件地址和个人信息。 我的问题 用户的数据通过传递的模型变量来自我的控制器: public ActionResult Profil() { var model = db.Users.First(e => e.UserName == WebSecurity.CurrentUserName); return View(model); } 在我看来,输出如下: <label>Phone number: </label> @if (Model.PhoneNumber != null) { @Model.PhoneNumber } else { <span class="red">You haven't set up your phone number yet. </span> } 用户可以更改其信息的形式将使用另一个模型ProfileModel。所以基本我需要使用两个模型在我的看法,一个用于输出信息,一个用于发布数据。我以为使用部分视图我可以实现这一点,但我得到这个错误:
这是我对局部视图的呼吁如下所示: @using (Html.BeginForm()) { @Html.AntiForgeryToken() @Html.ValidationSummary() @Html.Partial("_ModifyProfileInfo") } 这是部分视图: @model Applicense.Models.ProfileModel <ul> <li> @Html.LabelFor(m => m.Email) @Html.EditorFor(m => m.Email) </li> <li> @Html.LabelFor(m => m.ConfirmEmail) @Html.EditorFor(m => m.ConfirmEmail) </li> <input type="submit" value="Update e-mail" /> </ul> 最后这是我的ProfileModel: public class ProfileModel { [Required] [DataType(DataType.EmailAddress)] [Display(Name = "New e-mail address")] public string Email { get; set; } [DataType(DataType.EmailAddress)] [Display(Name = "Confirm new e-mail address")] [Compare("Email",ErrorMessage = "The e-mail and it's confirmation field do not match.")] public string ConfirmEmail { get; set; } } 我缺少什么?这样做的正确方法是什么? 编辑:
这只发生在我发布更改的电子邮件地址值时。这是我的ViewModel(ProfileModel.cs): public class ProfileModel { public User UserObject { get; set; } [Required] [DataType(DataType.EmailAddress)] [Display(Name = "új e-mail cím")] public string Email { get; set; } [DataType(DataType.EmailAddress)] [Display(Name = "új e-mail cím meger?sítése")] [Compare("Email",ErrorMessage = "A két e-mail cím nem egyezik.")] public string ConfirmEmail { get; set; } [DataType(DataType.EmailAddress)] [Display(Name= "E-mail cím")] public string ReferEmail { get; set; } } 控制器: public ActionResult Profil() { var User = db.Users.First(e => e.UserName == WebSecurity.CurrentUserName); var ProfileViewModel = new ProfileModel { UserObject = User }; return View(ProfileViewModel); } 最后这里是我的user.cs模型类: [Table("UserProfile")] public class User { [Key] [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)] public int UserId { get; set; } [Column("UserName")] public string UserName { get; set; } [Column("Email")] [Required] public string Email { get; set; } [Column("FirstName")] public string FirstName { get; set; } [Column("LastName")] public string LastName { get; set; } [Column("PhoneNumber")] public string PhoneNumber { get; set; } ... You get the idea of the rest... 我在想,它正在发生,因为该模型试图将数据放在每个必需的列到数据库。 编辑2: [HttpPost] [Authorize] [ValidateAntiForgeryToken] public ActionResult Profil(ProfileModel model) { if (ModelState.IsValid) { //insert into database return Content("everything's good"); } else { //outputs form errors return View(model); } } 解决方法
处理这种情况的最好方法是使用并将viewModel传递给您的Profile控制器,viewModel是要传递给您的视图的多个对象的包装类。
public class ProfileUserViewModel { public ProfileModel ProfileModelObject {get; set;} public UserModel UserModelObject {get; set;} } 您的控制器应如下所示: public ActionResult Profil() { var profileModel = db.Users.First(e => e.UserName == WebSecurity.CurrentUserName); var userModel = //fetch from db. var pmViewModel = new ProfileUserViewModel { ProfileModelObject = profileModel,UserModelObject = userModel }; return View(pmViewModel); } 最后你的看法: @model Applicense.Models.ProfileUserViewModel <label>Phone number: </label> @if (Model.ProfileModelObject.PhoneNumber != null) { @Model.PhoneNumber } else { <span class="red">You haven't set up your phone number yet. </span> } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – 如何防止用户导航回上一页?
- ASP.NET Web API应用程序中的Autofac多租户IoC容器
- 验证 – 在编辑页面上保存时忽略必需属性
- .net – 包恢复失败.回滚包更改 – Serilog.AspNetCore
- asp.net-mvc – asp.net mvc – 更新IE8中的表元素时,Micro
- asp.net-mvc-4 – 值“(字符串)”无效
- asp.net-mvc-3 – 比较(密码)属性
- asp.net-mvc – 不要在ASP .NET MVC 4 BundleConfig中缩小某
- asp.net – 在Publish上自动压缩html和css?
- ASP.NET Health Monitoring和ELMAH是否相互替代?
- asp.net-mvc-4 – 始终显示在Kendo网格中选择的第
- asp-classic – 旧ASP中的“on error goto 0”和
- asp.net-mvc-5 – 什么是最新的ASP .NET MVC版本
- asp.net-mvc – 添加为视图的链接intellisense
- asp.net-mvc – 在ASP.NET MVC 2中的RadioButton
- asp.net-mvc – 注入AutoMapper实例
- asp.net – Reflection构成了什么风险? (中等信
- asp.net – 使用Mono的Linux上的ActiveX?
- ASP.NET Core 开源GitServer 实现自己的GitHub
- [译]ASP.NET Core 2.0 网址重定向的方法