Cos*_*smo 12 asp.net asp.net-mvc modelbinders viewmodel asp.net-mvc-2
我希望在我的视图中使用RenderPartial两次,并关联不同的模型.问题是两个模型中都存在一些属性(昵称,密码).它们没有前缀,所以即使id或名称在输出中也是相同的.现在,如果我有昵称或密码的模型错误,则两个字段都会突出显示.
主要观点:
<div>
<% Html.RenderPartial("Register", Model.RegisterModel); %>
</div>
<div>
<% Html.RenderPartial("Login", Model.LoginModel); %>
</div>
Run Code Online (Sandbox Code Playgroud)
登录PartialView:
<% 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>
<% } %>
Run Code Online (Sandbox Code Playgroud)
注册PartialView:
<% 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>
<% } %>
Run Code Online (Sandbox Code Playgroud)
我怎么能改变这个?
Jam*_*ack 12
如果由于某种原因无法执行EditorTemplate,可以在View中执行此操作:
var dataDict = new ViewDataDictionary();
dataDict.TemplateInfo.HtmlFieldPrefix = "myPrefixHere";
Html.RenderPartial("myPartialViewName", myPartialViewModel, dataDict);
Run Code Online (Sandbox Code Playgroud)
请注意,PartialView中的所有输入都将作为前缀.
感谢R0MANARMY指出这一点.
而不是使用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>
Run Code Online (Sandbox Code Playgroud)
然后创建一个文件夹Views/Shared/EditorTemplates/RegisterModel.ascx(该文件的名称在EditorForhelper方法中使用).另请注意,此部分应强烈键入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>
<% } %>
Run Code Online (Sandbox Code Playgroud)
您可以为登录模型定义不同的部分 Views/Shared/EditorTemplates/LoginModel.ascx
| 归档时间: |
|
| 查看次数: |
6043 次 |
| 最近记录: |