ASP.NET MVC - TryUpdateModel не работает
Это мой взгляд:
@using (Html.BeginForm("Save", "Test", FormMethod.Post))
{
<label for="txtFirstName">First Name</label>
<input id="txtFirstName" type="text" />
<label for="txtLastName">Last Name</label>
<input id="txtLastName" type="text" />
<label for="txtUsername">Username</label>
<input id="txtUsername" type="text" />
<label for="txtEmail">Email</label>
<input id="txtEmail" type="text" />
<input type="submit" value="Save"/>
}
Это мой ActionMethod:
public RedirectToRouteResult Save()
{
var user = new User();
TryUpdateModel(user);
Database.SaveEntity(user);
return RedirectToAction("Index");
}
Это моя модель: @model Game.Model.User
Когда я отлаживаю и перехожу на TryUpdateModel, пользовательский объект не обновляется до значений, которые я ввел в представлении.
Кто-нибудь может увидеть, где я иду не так?
2 ответа
Решение
Вы не получаете данные формы, которые были пост-подтверждены.
Попробуй это:
public RedirectToRouteResult Save(string txtFirstName, string txtLastName,
string txtUsername, string txtEmail)
{
var User = new User();
user.FirstName = txtFirstName;
user.LastName = txtLastName;
user.Username = txtUsername;
user.Email = txtEmail;
TryUpdateModel(user);
Database.SaveEntity(user);
return RedirectToAction("Index");
}
Чтобы использовать строго типизированное представление, сделайте это:
@model Game.Model.User
@using (Html.BeginForm("Save", "Test", FormMethod.Post))
{
@Html.LabelFor(m => m.FirstName)
@Html.EditorFor(m => m.FirstName)
@Html.LabelFor(m => m.LastName)
@Html.EditorFor(m => m.LastName)
@Html.LabelFor(m => m.Username)
@Html.EditorFor(m => m.Username)
@Html.LabelFor(m => m.Email)
@Html.EditorFor(m => m.Email)
<input type="submit" value="Save"/>
}
а затем измените подпись метода действия, чтобы получить User
:
public RedirectToRouteResult Save(User user)
{
TryUpdateModel(user);
Database.SaveEntity(user);
return RedirectToAction("Index");
}
На вид:
<input id="txtFirstName" type="text" />
Я думаю, вы должны добавить name
имущество
<input id="txtFirstName" type="text" name="FirstName" />
или простой способ:
@Html.TextBoxFor(m=>m.FirstName)