Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过javascript更改Blazor中的输入值不会';不要改变它';s绑定属性值_Javascript_C#_Asp.net Core_Blazor - Fatal编程技术网

通过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#中的值也将被更改

这个答案并不完整,我只是告诉你如何去做,而不是正确的代码来解决你的问题,但是如果你想要更多关于如何去做的信息,你可以看看