- Мое веб-приложение ASP.NET Core имеет форму входа на двух разных страницах.
- Одна страница (
Login.cshtml
) является основной формой входа и использует LoginViewModel
. - Другая страница (
Main.cshtml
) имеет собственный тип ViewModel.<form>
на этой странице будет POST
на первой странице, например:
LoginViewModel.cs
class LoginViewModel {
[Required]
public String UserName { get; set; }
[Required]
public String Password { get; set; }
}
Login.cshtml
@model LoginViewModel
<section>
@using( Html.BeginForm() ) {
<div class="field">
@Html.TextBoxFor( m => m.UserName )
@* validation messages, display-names, etc omitted for brevity *@
</div>
<div class="field">
@Html.PasswordFor( m => m.Password )
</div>
}
</section>
Main.cshtml
@model MainViewModel
<h2>Login</h2>
<form action="@Url( action: "Login" )" method="post">
<div class="field">
@Html.TextBoxFor( m => /* What goes here? */ )
</div>
<div class="field">
@Html.PasswordFor( m => /* What goes here? */ )
</div>
</form>
<h2>Register</h2>
<!-- etc -->
Я знаю, что могу просто жестко кодировать <input type="text" name="UserName" />
и <input type="password" name="Password" />
, но это вызывает проблемы с техническим обслуживанием, если я переименую LoginViewModel::UserName
, например, так как это становится магией.строка.
Я не могу просто добавить LoginViewModel
в качестве члена MainViewModel
, потому что тогда TextBoxFor( m => m.LoginVM.UserName )
отобразит `name =" LoginVM.UserName ", что неверно.