我在實現ViewModel類時出現問題,該類用作圍繞由L2SQL生成的名爲「用戶」的Model類的包裝類。總之,當我必須針對L2SQL模型進行驗證時,我有兩個實例。一個是用戶首次註冊時,另一個是用戶登錄並僅編輯他的部分賬戶數據。ViewModel驗證對象與L2SQL生成的模型類問題
初始「問題」嘗試編輯&驗證只有一些針對從View只顯示幾個(如名字,姓氏,電子郵件)時,缺少的原L2SQL模型帳戶詳細信息時,被(如密碼)將在驗證運行時亮起來。密碼設置將有其自己的視圖。
我在這裏建議StackOverflow添加一個包裝ViewModel類將是最好的解決方案。所以,我沒有,下面執行:
視圖模型代碼:
[Bind]
public class AccountEdit
{
public User UserAccount { get; set; }
[Required(ErrorMessage = "First name required"), StringLength(20, MinimumLength = 3, ErrorMessage = "Must be between 3 and 20 characters")]
public string FirstName { get { return UserAccount.FirstName; } set { UserAccount.FirstName = value; } }
[Required(ErrorMessage = "Last name required"), StringLength(20, MinimumLength = 3, ErrorMessage = "Must be between 3 and 20 characters")]
public string LastName { get { return UserAccount.LastName; } set { UserAccount.LastName = value; } }
[Required(ErrorMessage = "Email address required"), RegularExpression("^[a-z0-9_\\+-]+(\\.[a-z0-9_\\+-]+)*@[a-z0-9-]+(\\.[a-z0-9-]+)*\\.([a-z]{2,4})$", ErrorMessage = "Must be a valid email address")]
public string Email { get { return UserAccount.Email; } set { UserAccount.Email = value; } }
}
控制器代碼:
//
// GET /User/Account
public ActionResult Account()
{
string cookieUser = User.Identity.Name;
User user = userRepository.GetUserByEmail(cookieUser);
return View(user);
}
// POST /User/Account
[HttpPost]
public ActionResult Account(AccountEdit model)
{
if (ModelState.IsValid)
{
model.LastUpdated = DateTime.Now;
userRepository.Save();
}
return View(model);
}
教職員代碼:
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/User.Master" Inherits="System.Web.Mvc.ViewPage<Digitalent.Models.User>" %>
<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
Account settings
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<% using (Html.BeginForm()) {%>
<%= Html.ValidationSummary("Oops! Please correct the errors and try again!") %>
<p>
<label for="FirstName">First name:</label>
<%: Html.TextBoxFor(model => model.FirstName, new { @class = "textfield" })%>
<%: Html.ValidationMessageFor(model => model.FirstName) %>
</p>
<p>
<label for="LastName">Last name:</label>
<%: Html.TextBoxFor(model => model.LastName, new { @class = "textfield" })%>
<%: Html.ValidationMessageFor(model => model.LastName) %>
</p>
<p>
<label for="Email">Email address:</label>
<%: Html.TextBoxFor(model => model.Email, new { @class = "textfield" })%>
<%: Html.ValidationMessageFor(model => model.Email) %>
</p>
<p>
Email newsletter: <%= Html.CheckBoxFor(model => model.EmailNewsletter) %>
<label for="EmailNewsletter">Keep me posted with latest Digitalent happenings.</label>
</p>
<p>
<input type="submit" value="Save changes" class="button" />
</p>
<p><a href="/talent/password">Change your password settings</a></p>
<% } %>
但現在,當我試圖運行該應用程序運行驗證時出現錯誤:
'對象引用未設置爲對象的實例'。
在我的ViewModel下面一行:
「公共字符串名字{{返回UserAccount.FirstName; } set {UserAccount.FirstName = value; }}'
我哪裏錯了,或者別人能告訴我一個更好的推薦方法,因爲我是新手。請幫助!
,如果我做我得到這個錯誤: 「傳遞到字典的模型項的類型爲「Digitalent.Models .User',但這個字典需要一個'Digitalent.Models.AccountEdit'類型的模型項目。「 我需要使用「Digitalent.Models.User」在GET視圖實例中首先填充字段。 – shahidaltaf 2010-08-25 16:21:54
我需要在GET視圖中更改任何內容嗎? – shahidaltaf 2010-08-25 16:24:14