Asp.net
ASP.NET MVC 2 - ViewModel 前綴
我想在我的視圖中使用 RenderPartial 兩次,並關聯不同的模型。問題是兩個模型中都存在一些屬性(暱稱、密碼)。它們沒有前綴,因此即使是 id 或名稱在輸出中也是相等的。現在,如果我有暱稱或密碼的模型錯誤,這兩個欄位都會突出顯示。
主視圖:
<div> <% Html.RenderPartial("Register", Model.RegisterModel); %> </div> <div> <% Html.RenderPartial("Login", Model.LoginModel); %> </div>登錄部分視圖:
<% using (Html.BeginForm("Login", "Member")) { %> <fieldset> <legend>Login</legend> <p> <%= Html.LabelFor(x => x.Nickname) %> <%= Html.TextBoxFor(x => x.Nickname) %> </p> <p> <%= Html.LabelFor(x => x.Password) %> <%= Html.PasswordFor(x => x.Password) %> </p> <input type="submit" value="Login" /> </fieldset> <% } %>註冊部分視圖:
<% using (Html.BeginForm("Register", "Member")) { %> <fieldset> <legend>Register</legend> <p> <%= Html.LabelFor(x => x.Nickname) %> <%= Html.TextBoxFor(x => x.Nickname) %> </p> <p> <%= Html.LabelFor(x => x.Email) %> <%= Html.TextBoxFor(x => x.Email) %> </p> <p> <%= Html.LabelFor(x => x.Password) %> <%= Html.PasswordFor(x => x.Password) %> </p> <p> <%= Html.LabelFor(x => x.PasswordRepeat) %> <%= Html.PasswordFor(x => x.PasswordRepeat) %> </p> <input type="submit" value="Register" /> </fieldset> <% } %>我怎樣才能改變這個?
Html.RenderPartial您可以使用將處理前綴的編輯器模板代替使用。所以在你的主要觀點中:
<div> <%-- See below what does the second argument mean --%> <%= Html.EditorFor(x => x.RegisterModel, "RegisterModel") %> </div> <div> <%= Html.EditorFor(x => x.LoginModel, "LoginModel") %> </div>然後創建一個文件夾
Views/Shared/EditorTemplates/RegisterModel.ascx(這個文件的名字用在EditorFor輔助方法中)。還要注意,這個部分應該強類型為RegisterModel屬性的類型:<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<Ns.Models.RegisterModel>" %> <% using (Html.BeginForm("Register", "Member")) { %> <fieldset> <legend>Register</legend> <p> <%= Html.LabelFor(x => x.Nickname) %> <%= Html.TextBoxFor(x => x.Nickname) %> </p> <p> <%= Html.LabelFor(x => x.Email) %> <%= Html.TextBoxFor(x => x.Email) %> </p> <p> <%= Html.LabelFor(x => x.Password) %> <%= Html.PasswordFor(x => x.Password) %> </p> <p> <%= Html.LabelFor(x => x.PasswordRepeat) %> <%= Html.PasswordFor(x => x.PasswordRepeat) %> </p> <input type="submit" value="Register" /> </fieldset> <% } %>您可以為登錄模型定義不同的部分
Views/Shared/EditorTemplates/LoginModel.ascx
如果由於某種原因您不能執行 EditorTemplate,您可以在您的視圖中執行此操作:
var dataDict = new ViewDataDictionary(); dataDict.TemplateInfo.HtmlFieldPrefix = "myPrefixHere"; Html.RenderPartial("myPartialViewName", myPartialViewModel, dataDict);瞧,您的 PartialView 中的所有輸入都將帶有前綴。
感謝 R0MANARMY 指出這一點。