代码之家  ›  专栏  ›  技术社区  ›  user1675891

对模型对象的更改未传回控制器

  •  0
  • user1675891  · 技术社区  · 10 年前

    我正在加载模型以查看和显示它。然后我对其中一个字段进行更改并将其发送回。根据中断点,我正在使用正确的操作方法,但传入的模型没有任何更改。

    我怀疑我已经解除了视图中控件的绑定。我两次都试过下面这两个相同的问题。

    @Html.TextBoxFor(bike => bike.Color)
    <input type="text" value="@Model.Color" />
    

    我是否没有正确装订?我该怎么做?

    控制器被击中断点,看起来像这样。请注意,根据智能感知,传入的自行车没有任何变化。如果我在VS中手动进行更改,它们将存储到DB中。

    public ActionResult BikeStore(Bike bike)
    {
      ...
      return RedirectToAction("Bikes");
    }
    

    模型是代码优先生成的。

    public partial class Bike
    {
      [Key]
      public Guid Id{get; set;}
    
      [Required]
      [StringLength(999)]
      public string Color { get; set; }
    }
    

    使用此完成提交。

    @Html.ActionLink("Submit", "BikeStore", "Home", @Model, null)
    

    但是,如果我执行以下操作,它会起作用,就像在控制器中添加的一样。但不是页面上任何控件的实际内容。所以我很确定这些是不受约束的,我不知道为什么或如何制作它们。

    @Html.ActionLink("Submit", "BikeStore", "Home", new Bike
    {
      Id = Model.Id,
      Color = Model.Color + "!"
    }, null)
    
    1 回复  |  直到 10 年前
        1
  •  1
  •   Steve Harris    10 年前

    提交操作错误。您正在传递@Model,但这将是视图渲染时的模型。您应该使用带有提交按钮的表单。这将在发布时将用户编辑的值绑定到模型。

    @using (Html.BeginForm("BikeStore", "Home", FormMethod.Post)
    {
        // your inputs
        // ...
        <input type="submit" value="Submit">
    }