从Blazor(服务器端)中的@ondblclick事件处理程序导航,以动态地构成路由

时间:2019-10-04 09:10:50

标签: blazor blazor-server-side

我试图从服务器端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是动态列表...

1 个答案:

答案 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))可以访问变量,而不能访问其值。您必须定义一个位于循环本地的变量。