asp.net-mvc:将 passwordFor 添加到视图自动填充我的字段
asp.net-mvc: Adding a passwordFor to the view auto populates my fields
场景:我正在尝试添加一个视图以通过管理员创建新用户。该应用程序是表单身份验证。有一个登录用户(管理员)。将密码添加到视图后,视图会自动使用登录用户填充字段。
控制器代码:
public ActionResult Create()
{
var userViewModel = new UserViewModel();
return View(userViewModel);
}
查看代码:
@model MVC4.Models.UserViewModel
@{
ViewBag.Title = "Create";
}
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)
<fieldset>
<legend>UserVireModelcs</legend>
<div class="editor-label">
@Html.LabelFor(model => model.UserName)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.UserName)
@Html.ValidationMessageFor(model => model.UserName)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Password)
</div>
<div class="editor-field">
@Html.PasswordFor(model => model.Password)
@Html.ValidationMessageFor(model => model.Password)
</div>
<p>
<input type="submit" value="Create" />
</p>
</fieldset>
}
我 怀疑 在这里发生的是 应用程序 没有预填充字段,但是 浏览器 是。这是因为此表单看起来完全 像登录提示。 (您可以通过从浏览器本身清除您的信息来测试这一点,这样它就不会自动填写此站点上的任何登录提示。)
我建议的是在语义上将登录和创建用户的概念分开。基本上...重命名字段。具有一些更具体名称的简单视图模型会有所帮助:
public class CreateUserViewModel
{
public string NewUserUsername { get; set; }
public string NewUserPasswords { get; set; }
}
然后在您的视图中使用它:
<div class="editor-label">
@Html.LabelFor(model => model. NewUserUsername)
</div>
<div class="editor-field">
@Html.EditorFor(model => model. NewUserUsername)
@Html.ValidationMessageFor(model => model. NewUserUsername)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.NewUserPassword)
</div>
<div class="editor-field">
@Html.PasswordFor(model => model.NewUserPassword)
@Html.ValidationMessageFor(model => model.NewUserPassword)
</div>
它可能比人们希望的要冗长一点(我同意越简单越好),但是在这种情况下为命名添加一些明确的上下文可以让浏览器更清楚这个 不是登录表单。使用任何对您的需求有意义的命名,使其比 Username
和 Password
.
更具描述性即可
场景:我正在尝试添加一个视图以通过管理员创建新用户。该应用程序是表单身份验证。有一个登录用户(管理员)。将密码添加到视图后,视图会自动使用登录用户填充字段。
控制器代码:
public ActionResult Create()
{
var userViewModel = new UserViewModel();
return View(userViewModel);
}
查看代码:
@model MVC4.Models.UserViewModel
@{
ViewBag.Title = "Create";
}
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)
<fieldset>
<legend>UserVireModelcs</legend>
<div class="editor-label">
@Html.LabelFor(model => model.UserName)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.UserName)
@Html.ValidationMessageFor(model => model.UserName)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Password)
</div>
<div class="editor-field">
@Html.PasswordFor(model => model.Password)
@Html.ValidationMessageFor(model => model.Password)
</div>
<p>
<input type="submit" value="Create" />
</p>
</fieldset>
}
我 怀疑 在这里发生的是 应用程序 没有预填充字段,但是 浏览器 是。这是因为此表单看起来完全 像登录提示。 (您可以通过从浏览器本身清除您的信息来测试这一点,这样它就不会自动填写此站点上的任何登录提示。)
我建议的是在语义上将登录和创建用户的概念分开。基本上...重命名字段。具有一些更具体名称的简单视图模型会有所帮助:
public class CreateUserViewModel
{
public string NewUserUsername { get; set; }
public string NewUserPasswords { get; set; }
}
然后在您的视图中使用它:
<div class="editor-label">
@Html.LabelFor(model => model. NewUserUsername)
</div>
<div class="editor-field">
@Html.EditorFor(model => model. NewUserUsername)
@Html.ValidationMessageFor(model => model. NewUserUsername)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.NewUserPassword)
</div>
<div class="editor-field">
@Html.PasswordFor(model => model.NewUserPassword)
@Html.ValidationMessageFor(model => model.NewUserPassword)
</div>
它可能比人们希望的要冗长一点(我同意越简单越好),但是在这种情况下为命名添加一些明确的上下文可以让浏览器更清楚这个 不是登录表单。使用任何对您的需求有意义的命名,使其比 Username
和 Password
.