Передача имени пользователя обратно в MVC view/textbox после неудачного входа в систему
При неудачном входе в систему я хотел бы сохранить поле имени пользователя. У меня есть объект ViewModel под названием "пользователь", который содержит строку Имя пользователя
public class User
{
public bool RememberMe { get; set; }
public string Username { get; set; }
}
Эта информация передается в метод контроллера через
login( User user )
{
… validate user
if (!valid)
{
ModelState.AddModelError("", "Login name or password is incorrect!");
return View(user);
}
}
Я подтвердил, что имя пользователя существует в объекте пользователя, который передается обратно в представление.
Теперь в представлении у меня есть это:
@model Myapp.Models.User
<label class="form-label" for="form-signin-username">Username</label>
<input data-bind="value: loginViewModel.Username" class="form-control" id="form-signin-username" name="username" type="text" required="" placeholder="Username">
Javascript это:
var LoginViewModel = function () {
self.UserName = ko.observable();
self.Password = ko.observable();
self.Authenticate = function (event) {
var data = {
UserName: self.UserName(),
Password: self.Password()
}
xhr = $.ajax({
data: data,
dataType: 'JSON',
type: "POST",
url: "/Home/Login",
success: function (data) {
if (data.Success) {
// process successful login ( this works)
}
else
{
// this is what doesn't work
self.UserName = data.Username;
}
}
}
}
Кто-нибудь может понять, почему это текстовое поле не заполняется автоматически с помощью предыдущего имени пользователя?
1 ответ
Вам необходимо убедиться, что требуемые значения модели назначены для модели вида.
Например
var LoginViewModel = function () {
self.UserName = ko.observable(@(Model.Username)); //set initial value
//...
Я бы также предложил использовать HtmlHelper
для входов в представлении
@model Myapp.Models.User
<!--...-->
@Html.LabelFor(m => m.Username, "Username")
@Html.TextBoxFor(m => m.Username, new { data_bind = "value: Username", @class = "form-control", placeholder="Username"})