【问题标题】:ASP.NET MVC - TryUpdateModel Not WorkingASP.NET MVC - TryUpdateModel 不工作
【发布时间】:2013-05-22 19:28:24
【问题描述】:

这是我的观点:

@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 时,用户对象不会更新为我在视图中输入的值。

谁能看出我哪里出错了?

【问题讨论】:

  • 检查HERE TryUpdateModel 是显式模型绑定。我认为你的代码是正确的。试试db.SaveChanges(); 而不是Database.SaveEntity();

标签: asp.net-mvc data-binding model model-binding model-binders


【解决方案1】:

您没有收到后支持的表单数据。

试试这个:

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

【讨论】:

  • 但是参数中的用户怎么知道它是什么?或者我如何发送播放器对象?
  • 好吧,我想您在用户创建/更新视图中单击Save 按钮...此视图的@modelUser 类型,因此当您回发表单时, ASP.NET 模型绑定器将发挥它的魔力,并将值数据绑定到 Save 操作方法的 User 对象(参数)。
  • 哦...对不起...我看到您没有使用强类型视图。在这种情况下,您必须按照我在更新答案中显示的操作。
  • 我添加了用户参数,但是在 TryUpdateModel 之后它仍然是空的
  • 在视图的顶部,我有:@model Game.Model.User
【解决方案2】:

在视图中:

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

我认为你应该添加name属性

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

或者一个简单的方法:

@Html.TextBoxFor(m=>m.FirstName)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-19
    • 2011-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-17
    相关资源
    最近更新 更多