模型绑定多个属性 SignalR

Posted

技术标签:

【中文标题】模型绑定多个属性 SignalR【英文标题】:Modelbinding multiple properties SignalR 【发布时间】:2021-06-21 17:06:33 【问题描述】:

我一直在一个新项目中试用 SignalR,但在模型绑定方面遇到了问题。

我的 javascript 中心:

state.socket?.invoke(SocketInvoke.submitAnswer, 1, 2, 3, [4,5,6]);

我的方法:

public async Task SubmitAnswer(int gameId, int quizId, int questionId, int[] optionIds)

但这似乎不起作用。我尝试将其更改为:

 const answer = 
            GameId: 1,
            QuizId: 2,
            QuestionId: 3,
            OptionIds: [4,5,6]
        
state.socket?.invoke(SocketInvoke.submitAnswer, answer);

public async Task SubmitAnswer(SubmittedAnswerViewModel answer)

public class SubmittedAnswerViewModel

 public int GameId  get; set; 
 public int QuizId  get; set; 
 public int QuestionId  get; set; 
 public int[] OptionIds  get; set; 
     

我还尝试将 OptionIds 更改为 List,以及将其转换为 int 以查看 int 数组是否存在问题,但不是。最后我想知道我的调用中是否有错字,所以我将参数更改为一个字符串并且成功绑定。

有谁知道为什么这不会绑定?我觉得答案可能很明显,但我就是看不到。

感谢阅读,感谢您的帮助。

【问题讨论】:

【参考方案1】:

您确定您的SocketInvoke.submitAnswer 返回字符串“submitAnswer”吗? 当我尝试使用此示例时,您的代码有效:https://docs.microsoft.com/en-us/aspnet/core/tutorials/signalr?view=aspnetcore-5.0&tabs=visual-studio#add-signalr-client-code

【讨论】:

您好,感谢您的回复。是的,因为我尝试将我的方法更改为只接收一个字符串参数,然后向它发送一个字符串,它接收到该字符串,但是当我尝试像这样发送多个参数时,它不起作用。 你能激活并发布服务器日志(docs.microsoft.com/en-us/aspnet/core/signalr/…)吗?客户说/抛出什么?是Error: Failed to invoke 'submitAnswer' due to an error on the server. InvalidDataException: Error binding arguments. Make sure that the types of the provided values match the types of the hub method being invoked.吗? (在您的 Startup.cs 中启用此 services.AddSignalR(o => o.EnableDetailedErrors = true; );【参考方案2】:

我终于明白了……

我在方法中执行 Task.Delay(),有效地让我的钩子挂起并等待响应。我认为这是确保在正确的时间准确发送问题的好方法,并且更难修改时间限制等。

回想起来,这似乎很明显,但我才发现这是原因,因为我在谷歌搜索解决方案时留下了一个断点,我的 VSC 突然开始闪烁。

【讨论】:

以上是关于模型绑定多个属性 SignalR的主要内容,如果未能解决你的问题,请参考以下文章

一个 VBO 可以绑定多个 VAO 吗?

将 ListBoxFor 绑定到 MVC 3 中的模型并使用另一个模型自动选择多个项目

通过多个组件进行双向绑定

双向绑定到 WPF 中多个列表框上的 ListBox SelectedItem

RxSwift 从一个创建多个 Observable

使用 RxSwift 将多个 UITextField 绑定到类道具