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 megersí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 – 按钮点击后如何启动另一个aspx网页?
- asp.net-mvc – 我的模型应该在哪里生活? Web层或数据层?
- asp.net文件上传示例分享
- asp.net-mvc-3 – 是否需要StructureMap HttpContextScoped
- asp.net – Visual C#中事件的下拉列表在哪里?
- asp.net-mvc – 修改模型时更新视图
- asp.net-mvc – Html.CheckBox返回false如果禁用,即使selec
- asp.net-mvc – System.Data.SqlClient.SqlException:无效
- asp.net – 在WebForms中调试时关闭捆绑/缩小
- asp.net-mvc – 在MVC3中的错误 – 请求永远不会超时 在同一
- asp.net – Windows Workflow Foundation 4的状态
- asp.net-web-api – Asp.net WebApi将UTC时间字符
- asp.net-mvc – ASP.NET MVC将数据从视图传递给控
- ASP.NET %=% vs %:%
- asp.net – 无法加载文件或程序集“Microsoft.We
- asp.net – 如何预编译Web应用程序项目?
- 使用ASP.NET创建精灵图像
- ASP.net MVC ValidationSummary总是被渲染
- asp.net-core – 哪些.NET框架版本支持.NET Fram
- 使用Asp.Net Identity 2在AspNetUserClaims中存储
