【问题标题】:ASP.NET 4.5 model binding customize updatingASP.NET 4.5 模型绑定自定义更新
【发布时间】:2013-03-04 17:56:20
【问题描述】:

我正在使用 .NET 4.5 中添加的 ASP.NET 表单模型绑定。我看到有很多关于模型绑定的东西应该使它更容易并减少你需要编写的代码量。但是,我想知道是否有办法手动更新项目。

我找到了这样的 TryUpdateModel 方法:

public void UpdateEquipment(int Id)
{
    var equip = EquipCondContext.Equipments.Single(x => x.Id == Id);
    TryUpdateModel(equip);
}

但是,我希望有能力做到这一点:

public void UpdateEquipment(int Id)
{
    var equip = EquipCondContext.Equipments.Single(x => x.Id == Id);
    //equip.Description = A TextBox.Text on that row that I just saved in my list.
    EquipCondContext.SaveChanges();
}

有没有办法像这样进行更手动的更新?


这是一个示例场景。假设我在用户输入用户 ID 的行上有一个文本框,但在更新时我想实际设置他们的徽章编号。在我的更新函数中,我首先要进行查询以获取给定用户 ID 的徽章编号,然后在保存上下文之前在我的实体中设置此属性。

【问题讨论】:

  • 在第二个示例中,您根本不需要模型绑定。
  • 如果你举一个你想要达到的目标的例子,也许会让事情变得更清楚。为什么要手动更新?
  • 您的第二个示例将起作用。 TryUpdateModel 将使用您的模型 equip 和默认值提供程序(Form、Querystring 等)并尝试通过匹配模型上的名称来设置值。
  • @Nenad。我知道我不需要第二个模型绑定。如果我愿意,我只是写了一行作为手动设置属性的示例。我添加了一个示例来更好地证明/说明我为什么需要此功能。
  • @atticae 我已经为你添加了一个场景/示例。

标签: c# asp.net .net model-binding asp.net-4.5


【解决方案1】:

您正在尝试做的是挂钩模型绑定过程并在保存之前更改值。我不确定 Webforms 中的模型绑定是否与 MVC 中的 1:1 相同,但你可以试试这篇文章:

http://www.markeverard.com/2011/07/18/creating-a-custom-modelbinder-allowing-validation-of-injected-composite-models/

这篇文章是关于验证的,但您也可以轻松地更改那里的值。

基本上,您所做的是为您的类注册一个自定义 ModelBinder,然后将其挂接到绑定模型的调用中。

【讨论】:

    【解决方案2】:

    如果您想手动跟踪文本框中的更改,您必须收听Textbox.TextChanged event

    <asp:Textbox ... OnTextChanged="MyTextBoxOnTextChanged" />
    

    您可以随心所欲地使用文本框值,在您的情况下将其存储为相应的设备描述。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-05-07
      • 2023-03-31
      • 1970-01-01
      • 2011-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多