1

Это мой Вид: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, пользовательский объект не обновляет значения, введенные в представление.

Может ли кто-нибудь увидеть, где я ошибаюсь?

+0

Check [ЗДЕСЬ] (http://stackoverflow.com/questions/7735635/real-example-of-tryupdatemodel-asp-net-mvc-3) TryUpdateModel - это явная привязка модели. Я думаю, что ваши коды верны. Попробуйте 'db.SaveChanges();' вместо 'Database.SaveEntity();' –

ответ

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"); 
} 
+0

Но как пользователь в параметре знает, что это такое? Или как отправить объект игрока? – Subby

+1

Ну, я полагаю, что вы нажмете кнопку «Сохранить» в представлении «Создать/обновить пользователя» ... «@ model» этого представления имеет тип «Пользователь», и поэтому, когда вы возвращаете форму, ASP.NET Model Binder будет делайте свою магию и привязывайте значения к объекту 'User' (параметр) метода' Save'. –

+0

Я пробовал это. Это не сработало. – Subby

1

На Вид:

<input id="txtFirstName" type="text" /> 

Я думаю, вы должны добавить name свойство

<input id="txtFirstName" type="text" name="FirstName" /> 

или простой способ:

@Html.TextBoxFor(m=>m.FirstName) 
Смежные вопросы