ASP.NET MVC 2编辑控制器使用viewmodel无法正常工作

时间:2011-01-15 11:24:52

标签: asp.net-mvc controller

嘿,问题是ASP.NET MVC 2中的编辑控制器不起作用。我尝试了很多方法,没有任何作用。

以下是示例代码:

[Authorize]
public ActionResult Edit() {
    var edit = new UserViewModel {
        User = Database.Users.Single(u => u.UserName == User.Identity.Name)
    };

    return View(edit);
}

[Authorize]
[HttpPost]
public ActionResult Edit(FormCollection formCollection) {
    var edit = new UserViewModel {
        User = Database.Users.Single(u => u.UserName == User.Identity.Name)
    };

    // TODO: try, catch
    UpdateModel(edit, "User");
    Database.SaveChanges();

    return View(edit);
}

这是一个视图模型类:

public class UserViewModel {
    public User User { get; set; }
}

如何将此用户模型更新为数据库?我只使用电子邮件字段的那一刻:

<% Html.EnableClientValidation(); %>
<% using (Html.BeginForm()) {%>
<div>
    <div class="UserFieldLeft"><%: Html.LabelFor(model => model.User.Email) %></div>
    <div class="UserFieldRight"><%: Html.TextBoxFor(model => model.User.Email, new { style="width: 200px" }) %></div>
    <div class="UserFieldHelper"><%: Html.ValidationMessageFor(model => model.User.Email) %></div>
    <p><input class="UserFieldInput" type="submit" value="Zmień email" /></p>
</div>
<% } %>

如果我在本机用户模型上工作,它也不起作用。怎么了?我在哪里弄错了?

顺便说一句,我要使用视图模型为我的用户添加(将来)一些复选框(头发颜色,长度等)。

感谢您的时间和帮助。

1 个答案:

答案 0 :(得分:0)

您不需要前缀“用户”。

UpdateModel(edit);

应该有效。在formsCollection中,它们应该是User.Email的密钥。这应该映射到用户对象中的Email属性。