在布局页面上提交表单
Submit form on layout page
我是 mvc 新手。我喜欢从布局页面提交带有按钮的表单。还需要以某种方式将模型传递给视图的控制器。有什么提示或想法吗?
@if (!WebSecurity.IsAuthenticated) {
<form class="navbar-form navbar-right">
<div class="form-group">
<input type="text" class="form-control" placeholder="Benutzername">
</div>
<div class="form-group">
<input type="text" class="form-control" placeholder="Passwort">
</div>
<input type="submit" class="btn btn-success" value="Login"/>
<input type="submit" class="btn btn-danger" value="Registrieren" />
</form>
}
else {
<form class="navbar-form navbar-right">
<input type="submit" class="btn btn-danger" value="Logout">
</form>
}
public class LoginModel
{
[Required]
[Display(Name = "Benutzername")]
public string UserName { get; set; }
[Required]
[DataType(DataType.Password)]
[Display(Name = "Kennwort")]
public string Password { get; set; }
[Display(Name = "Speichern?")]
public bool RememberMe { get; set; }
}
public class RegisterModel
{
[Required]
[Display(Name = "Benutzername")]
public string UserName { get; set; }
[Required]
[StringLength(100, ErrorMessage = ""e{0}"e muss mindestens {2} Zeichen lang sein.", MinimumLength = 6)]
[DataType(DataType.Password)]
[Display(Name = "Kennwort")]
public string Password { get; set; }
[DataType(DataType.Password)]
[Display(Name = "Kennwort bestätigen")]
[Compare("Password", ErrorMessage = "Das Kennwort entspricht nicht dem Bestätigungskennwort.")]
public string ConfirmPassword { get; set; }
}
每个 input
标记的属性 name
绑定到您的 Model
class 的属性中,因此,只需将 name
属性添加到属性 您要绑定的名称,例如:
<form class="navbar-form navbar-right">
<div class="form-group">
<input type="text" class="form-control" name="UserName" placeholder="Benutzername">
</div>
<div class="form-group">
<input type="text" class="form-control" name="Password" placeholder="Passwort">
</div>
<input type="submit" class="btn btn-success" value="Login"/>
<input type="submit" class="btn btn-danger" value="Registrieren" />
</form>
提示
我建议您将此代码更改为 PartialView
而不是保留在 Layout
页面上。它很有用,因为您可以在模型中键入 PartialView
,并使用 Html
帮助程序(例如 Html.TextBoxFor(model => model.UserName, ...)
)生成输入标签作为示例。有很多 Html Helpers can help you like Html.BeginForm() method 我在这里都说了,这是一个很好的实践,但是你的代码会 运行 很好,因为这些很好的实践生成了像你这样的代码。
布局模型必须与页面模型相同。因此,这不是特别实用,除非您想对所有事情都使用基本模型,这不是好的做法。
更好的方法是使用 Html.Action()
并为您的登录表单使用单独的控制器操作,然后它可以拥有自己的模型和执行上下文。
几个 PartialView 怎么样?这是一个 rough/general 示例:
public class Login {
public string UserName { get; set; }
public string Password { get; set; }
}
public class Register : Login {
public string ConfirmPassword { get; set; }
}
部分登录:
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
<legend>Login</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.EditorFor(model => model.Password)
@Html.ValidationMessageFor(model => model.Password)
</div>
<p>
<input type="submit" value="Login" />
</p>
</fieldset>
}
注册部分:
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
<legend>Register</legend>
<div class="editor-label">
@Html.LabelFor(model => model.ConfirmPassword)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.ConfirmPassword)
@Html.ValidationMessageFor(model => model.ConfirmPassword)
</div>
<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.EditorFor(model => model.Password)
@Html.ValidationMessageFor(model => model.Password)
</div>
<p>
<input type="submit" value="Register" />
</p>
</fieldset>
}
在您的布局(或任何其他视图)中引用部分内容:
@Html.Partial("LoginPartial")
@Html.Partial("RegisterPartial")
我是 mvc 新手。我喜欢从布局页面提交带有按钮的表单。还需要以某种方式将模型传递给视图的控制器。有什么提示或想法吗?
@if (!WebSecurity.IsAuthenticated) {
<form class="navbar-form navbar-right">
<div class="form-group">
<input type="text" class="form-control" placeholder="Benutzername">
</div>
<div class="form-group">
<input type="text" class="form-control" placeholder="Passwort">
</div>
<input type="submit" class="btn btn-success" value="Login"/>
<input type="submit" class="btn btn-danger" value="Registrieren" />
</form>
}
else {
<form class="navbar-form navbar-right">
<input type="submit" class="btn btn-danger" value="Logout">
</form>
}
public class LoginModel
{
[Required]
[Display(Name = "Benutzername")]
public string UserName { get; set; }
[Required]
[DataType(DataType.Password)]
[Display(Name = "Kennwort")]
public string Password { get; set; }
[Display(Name = "Speichern?")]
public bool RememberMe { get; set; }
}
public class RegisterModel
{
[Required]
[Display(Name = "Benutzername")]
public string UserName { get; set; }
[Required]
[StringLength(100, ErrorMessage = ""e{0}"e muss mindestens {2} Zeichen lang sein.", MinimumLength = 6)]
[DataType(DataType.Password)]
[Display(Name = "Kennwort")]
public string Password { get; set; }
[DataType(DataType.Password)]
[Display(Name = "Kennwort bestätigen")]
[Compare("Password", ErrorMessage = "Das Kennwort entspricht nicht dem Bestätigungskennwort.")]
public string ConfirmPassword { get; set; }
}
每个 input
标记的属性 name
绑定到您的 Model
class 的属性中,因此,只需将 name
属性添加到属性 您要绑定的名称,例如:
<form class="navbar-form navbar-right">
<div class="form-group">
<input type="text" class="form-control" name="UserName" placeholder="Benutzername">
</div>
<div class="form-group">
<input type="text" class="form-control" name="Password" placeholder="Passwort">
</div>
<input type="submit" class="btn btn-success" value="Login"/>
<input type="submit" class="btn btn-danger" value="Registrieren" />
</form>
提示
我建议您将此代码更改为 PartialView
而不是保留在 Layout
页面上。它很有用,因为您可以在模型中键入 PartialView
,并使用 Html
帮助程序(例如 Html.TextBoxFor(model => model.UserName, ...)
)生成输入标签作为示例。有很多 Html Helpers can help you like Html.BeginForm() method 我在这里都说了,这是一个很好的实践,但是你的代码会 运行 很好,因为这些很好的实践生成了像你这样的代码。
布局模型必须与页面模型相同。因此,这不是特别实用,除非您想对所有事情都使用基本模型,这不是好的做法。
更好的方法是使用 Html.Action()
并为您的登录表单使用单独的控制器操作,然后它可以拥有自己的模型和执行上下文。
几个 PartialView 怎么样?这是一个 rough/general 示例:
public class Login {
public string UserName { get; set; }
public string Password { get; set; }
}
public class Register : Login {
public string ConfirmPassword { get; set; }
}
部分登录:
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
<legend>Login</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.EditorFor(model => model.Password)
@Html.ValidationMessageFor(model => model.Password)
</div>
<p>
<input type="submit" value="Login" />
</p>
</fieldset>
}
注册部分:
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
<legend>Register</legend>
<div class="editor-label">
@Html.LabelFor(model => model.ConfirmPassword)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.ConfirmPassword)
@Html.ValidationMessageFor(model => model.ConfirmPassword)
</div>
<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.EditorFor(model => model.Password)
@Html.ValidationMessageFor(model => model.Password)
</div>
<p>
<input type="submit" value="Register" />
</p>
</fieldset>
}
在您的布局(或任何其他视图)中引用部分内容:
@Html.Partial("LoginPartial")
@Html.Partial("RegisterPartial")