我正在使用Blazor服务器端建立聊天室。
由于接收消息和发送消息的样式不同,我制作了一个名为import re
contracts = soup.findAll('span', text=re.compile('.*:.*'))
MsgModel
剃须刀组件using Microsoft.AspNetCore.Components;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace BlazorApp1
{
public class MsgModel: ComponentBase
{
public string MsgText { get; set; }
}
}
和ReceiveMsg.razor
都是基于此模型的。
SendMsg.razor
@inherits MsgModel
<h3>ReceiveMsg</h3>@MsgText
我要在 @inherits MsgModel
<h3>SendMsg</h3>@MsgText
中输入消息文本并立即显示。
index.razor
现在的问题是:在@page "/"
@foreach (MsgModel _MsgModel in MsgList)
{
if (_MsgModel.GetType() == typeof(ReceiveMsg))
{
<ReceiveMsg></ReceiveMsg>
}
else
{
<SendMsg></SendMsg>
}
}
<div id="inputDiv">
<EditForm Model="_InputMsgModel" OnValidSubmit="@SubmitText">
<InputText @bind-Value="_InputMsgModel.MsgText" />
</EditForm>
</div>
@code{
protected MsgModel _InputMsgModel { get; set; } = new MsgModel();
protected List<MsgModel> MsgList { get; set; } = new List<MsgModel>();
protected void SubmitText()
{
SendMsg _SendMsg = new SendMsg();
_SendMsg.MsgText = _InputMsgModel.MsgText;
MsgList.Add(_SendMsg);
}
}
块中,我应该将for
转移到组件。同时,我还不知道如何转让。
你能帮我吗?谢谢。
答案 0 :(得分:0)
最后,我找到了解决这个问题的奇怪而愚蠢的方法。
我将这些代码添加到MsgModel
中:
[Parameter]
public MsgModel TransferModel
{
set
{
CopyAll(value, this);
}
}
private void CopyAll<T>(T source, T target)
{
var type = typeof(T);
foreach (var sourceProperty in type.GetProperties())
{
if (sourceProperty.Name != "TransferModel")
{
var targetProperty = type.GetProperty(sourceProperty.Name);
targetProperty.SetValue(target, sourceProperty.GetValue(source, null), null);
}
}
}
并像这样更改for
块:
@foreach (Models.MsgModel _MsgModel in MsgList)
{
if (_MsgModel.GetType() == typeof(ReceiveMsg))
{
<ReceiveMsg ShowFullImage="@ShowFullImage" TransferModel="_MsgModel"></ReceiveMsg>
}
else
{
<SendMsg ShowFullImage="@ShowFullImage" TransferModel="_MsgModel"></SendMsg>
}
}
这是多么愚蠢的方式!