我试图从服务器端Blazor上某个元素的@ondblclick处理程序导航,尝试为每一行打开一个详细信息页面。 这是相关代码:
@inject NavigationManager nm
...
@for (var elem in elements)
{
<tr @ondblclick="@(() => nm.NavigateTo("Cuenta/" + elem.Id.ToString()))">
...
</tr>
}
但是我总是遇到这个异常:
Microsoft.CSharp.RuntimeBinder.RuntimeBinderException: 'Cannot implicitly convert type 'void' to 'object''
我也尝试过这种方式:
<tr @ondblclick="@(() => nm.NavigateTo("Cuenta/" + @elem.Id.ToString()))">
<tr @ondblclick="nm.NavigateTo("Cuenta/" + elem.Id.ToString())">
<tr @ondblclick="@(nm.NavigateTo("Cuenta/" + elem.Id.ToString())">
<tr ondblclick="@(() => nm.NavigateTo("Cuenta/" + elem.Id.ToString()))">
可能还有其他的,但是似乎没有一个是正确的,但是如果我执行以下操作,它可能会起作用(但是它不可用=:
<tr @ondblclick="@(() => nm.NavigateTo("Cuenta/123"))">
那么,如何使用导航管理器直接从模板导航?
编辑:似乎与“ elem”是一个动态对象有关,因为elements是动态列表...
答案 0 :(得分:2)
我认为您需要实例化
之类的for循环中的elem.Id.ToString()的新实例。handlePastedText = (text: string, html?: string, editorState: EditorState) => {
const selection = editorState.getSelection();
const pastedBlocks = ContentState.createFromText(text).blockMap;
const newState = Modifier.replaceWithFragment(
editorState.getCurrentContent(),
editorState.getSelection(),
pastedBlocks,
);
const newEditorState = EditorState.push(editorState, newState, "insert-fragment");
this.handleChange(newEditorState);
return "handled";
};
希望这会有所帮助。
这是标准的C#行为,与Blazor不相关,在lambda表达式中,lambda表达式@(()=> DoSomething(i))可以访问变量,而不能访问其值。您必须定义一个位于循环本地的变量。