मैं कैसे Blazor सर्वर साइड में एक उस्तरा घटक के लिए एक मॉडल हस्तांतरण कर सकते हैं?

वोट
0

मैं Blazor सर्वर साइड उपयोग कर रहा हूँ एक चैट रूम बनाने के लिए।

संदेश प्राप्त करने और भेजने के संदेश अलग है की शैली के लिए, मैं एक मॉडल नामित किए गए 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ब्लॉक, मैं स्थानांतरित करना चाहिए _MsgModelघटक है। इस बीच, मैं कैसे अभी तक यह हस्तांतरण करने के लिए पता नहीं है।

क्या आप मेरी मदद करेंगे? धन्यवाद।

09/10/2019 को 13:02
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


1 जवाब

वोट
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>
        }
    }  

क्या एक बेवकूफ जिस तरह से यह है!

09/10/2019 को 15:35
का स्रोत उपयोगकर्ता

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more