模型绑定多个属性 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的主要内容,如果未能解决你的问题,请参考以下文章
将 ListBoxFor 绑定到 MVC 3 中的模型并使用另一个模型自动选择多个项目