0
我製作了一個MVC 3網站,允許用戶在線註冊和購買東西。我使用EF進行所有數據庫操作。我對用戶類實現如下更新幾個更改的字段MVC 3項目
public class User
{
[HiddenInput(DisplayValue = false)]
public long UserID { get; set; }
[Required(ErrorMessage = "Please enter a first name")]
[Display(Name="First Name")]
public string FirstName { get; set; }
[Required(ErrorMessage = "Please enter a last name")]
[Display(Name="Last Name")]
public string LastName { get; set; }
[Required(ErrorMessage = "Please enter an Email")]
[RegularExpression(".+\\@.+\\..+", ErrorMessage="Please enter a valid email")]
[Display(Name = "Email")]
public string Email { get; set; }
[Required(ErrorMessage = "Please enter a phone number")]
[Display(Name = "Phone Number")]
public string PhoneNumber { get; set; }
[Required(ErrorMessage = "Please enter a value for address line 1")]
[Display(Name = "Address Line 1")]
public string AddressLine1 { get; set; }
[Required(ErrorMessage = "Please enter a value for address line 2")]
[Display(Name = "Address Line 2")]
public string AddressLine2 { get; set; }
[Required(ErrorMessage = "Please enter a city")]
[Display(Name = "City")]
public string City { get; set; }
[Required(ErrorMessage = "Please enter a country")]
[Display(Name = "Country")]
public string Country { get; set; }
[Required(ErrorMessage = "Please enter a login name")]
[Display(Name = "Your Login Name")]
public string UserName { get; set; }
[Required(ErrorMessage = "Please enter a password")]
[DataType(DataType.Password)]
[Compare("Password")]
[Display(Name = "Your Password")]
public string Password { get; set; }
[DataType(DataType.Password)]
[Compare("Password", ErrorMessage="Passwords do not match")]
[System.ComponentModel.DataAnnotations.Schema.NotMapped]
[Display(Name = "Confirm Password")]
public string ConfirmPassword { get; set; }
}
現在,我面對的是在更新用戶信息的問題。我希望我會提供兩個不同的頁面來更新細節。一個用於更改密碼,另一個用於更改其他詳細信息。但是,問題是當我創建一個視圖來啓用編輯其他細節,驗證密碼激發,並且不允許我保存數據。我希望沒有顯示的字段的數據與存儲在數據庫中的數據相同。
請幫助我,因爲這是我的第一個問題,請告訴我有關解決我的問題需要解決的其他問題。下面是用戶控制編輯動作代碼:
public ViewResult Edit(int userId)
{
User user = repository.Users.Where(x => x.UserID == userId).Select(x => x).FirstOrDefault();
user.UserName = repository.Users.Where(x => x.UserID == userId).Select(x => x.UserName).FirstOrDefault();
return View(user);
}
[HttpPost]
public ActionResult Edit(User user)
{
//user.Password = repository.Users.Where(u => u.UserName.Equals(user.UserName)).Select(p => p.Password).FirstOrDefault().ToString();
user.ConfirmPassword = user.Password;
if (ModelState.IsValid)
{
repository.AddUser(user, "Edit");
TempData["message"] = string.Format("{0} has been saved", (user.FirstName+ " " +user.LastName));
return RedirectToAction("ListUsers", "User");
}
else
{
return View(user);
}
}
下面是查看代碼的編輯用戶
@model SportsStore.Domain.Entities.User
@{
ViewBag.Title = "Edit User";
Layout = "~/Views/Shared/_AdminLayout.cshtml";
}
<h2>Edit @Model.FirstName @Model.LastName</h2>
@Html.ValidationSummary()
@using (Html.BeginForm("Edit", "User", FormMethod.Post))
{
<table class="Grid">
<tr>
<td>First Name</td>
<td>@Html.EditorFor(x => x.FirstName)</td>
</tr>
<tr>
<td>Last Name</td>
<td>@Html.EditorFor(x => x.LastName)</td>
</tr>
<tr>
<td>Email</td>
<td>@Html.EditorFor(x => x.Email)</td>
</tr>
<tr>
<td>Phone Number</td>
<td>@Html.EditorFor(x => x.PhoneNumber)</td>
</tr>
<tr>
<td>Address Line 1</td>
<td>@Html.EditorFor(x => x.AddressLine1)</td>
</tr>
<tr>
<td>Address Line 2</td>
<td>@Html.EditorFor(x => x.AddressLine2)</td>
</tr>
<tr>
<td>City</td>
<td>@Html.EditorFor(x => x.City)</td>
</tr>
<tr>
<td>Country</td>
<td>@Html.EditorFor(x => x.Country)</td>
</tr>
</table>
@*Html.EditorFor(x => x.UserName)
@Html.PasswordFor(x => x.Password)
@Html.HiddenFor(x => x.ConfirmPassword)
@*{Model.ConfirmPassword = Model.Password;}*@
<input type="submit" value="Save" />
if (User.Identity.Name.Equals("admin", StringComparison.OrdinalIgnoreCase))
{
@Html.ActionLink("Cancel and return to User List", "ListUsers");
}
else
{
@Html.ActionLink("Cancel and return to User List", "List", "Product");
}
}
謝謝您回答。有沒有辦法在我可以使用q單視圖模型?分裂他們是最後的手段。 – Bodhi