【问题标题】:Blazor Valued changed while keeping 2-way bindingBlazor Valued 已更改,同时保持 2 向绑定
【发布时间】:2020-06-12 15:37:37
【问题描述】:

是否有保留 2-way 绑定以及在 @onchange 上调用的方法?

类似的东西。

<input class="form-control" placeholder="My Number" @bind="Record.Number"  @onchange="(()=> MyMethod())">

我希望它绑定,但在更改调用某些其他方法时不会设置更改事件中的 Record.Number 值。

@onkeyup 有效,但我想确保该值确实发生了变化。

【问题讨论】:

  • 大概 Record.Number 是一个 C# 属性。为什么不把你的 onchange 代码放在那里?
  • 很难把它放在那里,它是一个不直接在页面模型中的单独模型。页面模型有一个名为“记录”的属性,它有大量与记录相关的属性。所以 Record 属性无权访问 Page Model 方法。
  • 很公平。连接OnChange 真的搞砸了绑定吗?我想这两种机制应该仍然有效。
  • 很遗憾。如果有onchange,就不能使用@bind,必须使用value='Record.Number',而且当它发生变化时不再设置属性,必须在onchange中使用的方法中设置。可能没有简单的方法,可能必须直接将我的属性放在 Page 模型中,希望我不必这样做。

标签: c# .net-core blazor blazor-server-side


【解决方案1】:

这一行:

<input class="form-control" placeholder="My Number" @bind="Record.Number"  
   @onchange="(()=> MyMethod())">

可以换一种说法:

<input class="form-control" placeholder="My Number" value="@record.Number" 
            @onchange="@((args) => { record.Number = args.Value.ToString(); 
            MyMethod();})"/>

这将创建一个双向绑定,其中输入值在绑定字段 (record.Number) 中更新,因为触发了“更改”事件(这总是在您退出控件时发生)。此外,调用 MyMethod 方法(此处用于演示值已更改,以及时间(跳出控件)。

这是一个工作示例:

<input class="form-control" placeholder="My Number" value="@record.Number" 
            @onchange="@((args) => { record.Number = args.Value.ToString(); MyMethod();})">
<p>@output</p>

@code {

    private static string output;
 private void MyMethod()
    {
        output = record.Number;
    }
    Record record = new Record();

    public class Record
    {
        public string Number { get; set; }
    }
}

希望这会有所帮助...

【讨论】:

  • 这可能是最好的。谢谢
  • 你们能不能用另外一个名字,而不是现在c#中的保留关键字record?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-08
  • 2019-01-15
  • 2014-09-27
  • 1970-01-01
相关资源
最近更新 更多