通过javascript更改Blazor中的输入值不会';不要改变它';s绑定属性值
我正在使用通过javascript更改Blazor中的输入值不会';不要改变它';s绑定属性值,javascript,c#,asp.net-core,blazor,Javascript,C#,Asp.net Core,Blazor,我正在使用app.net core 3.1和blazor构建一个网站。 在我的一个组件中,我有: 消息只是一个字符串属性 我有javascript: document.getElementById('input-message')。value='some text' 问题是在运行上述js之后,值会发生变化,但消息值不会发生变化,当然,如果我在中键入或粘贴一些内容,消息值也会发生变化。显然,通过javascript更改值或DOM中的任何其他更改都不会改变状态,所以blazor不会重新渲染组件。甚
app.net core 3.1
和blazor
构建一个网站。
在我的一个组件中,我有:
消息
只是一个字符串属性
我有javascript:
document.getElementById('input-message')。value='some text'代码>
问题是在运行上述js之后,
值会发生变化,但消息
值不会发生变化,当然,如果我在
中键入或粘贴一些内容,消息
值也会发生变化。显然,通过javascript更改
值或DOM中的任何其他更改都不会改变状态,所以blazor不会重新渲染组件。甚至调用statehaschange()代码>在razor页面中手动将不起作用
要完成此操作,您只需在用户正常修改
时触发相同的DOM事件,如下所示:
var myElement = document.getElementById('input-message');
myElement.value = 'some text';
var event = new Event('change');
myElement.dispatchEvent(event);
您不应该直接在javascript中更改输入值,您应该做的是调用一个c#函数来更新该值,然后它将更新javascript
而不是做
document.getElementById('input-message').value = 'some text';
你应该这样做
DotNet.invokeMethodAsync('UpdateMessageValue', 'some text');
你在哪里
public void UpdateMessageValue(string value){
Message = value;
}
由于您在输入中使用了bind
,因此document.getElementById('input-message').value
的值将被更改,c#中的值也将被更改
这个答案并不完整,我只是告诉你如何去做,而不是正确的代码来解决你的问题,但是如果你想要更多关于如何去做的信息,你可以看看