Cum pot transfera un model într-o componentă Razor în Blazor server-side?

voturi
0

Sunt folosind Blazor server-side pentru a face o cameră de chat.

Pentru stilul de a primi mesajul și trimite mesajul este diferit, am făcut un model numit 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; }
    }
}

Componentele de ras ReceiveMsg.razorși de SendMsg.razorbaza sunt pe acest model.

@inherits MsgModel
<h3>ReceiveMsg</h3>@MsgText    


 @inherits MsgModel
 <h3>SendMsg</h3>@MsgText        

În index.razor, vreau să introduceți textul mesajului și afișați - l imediat.

@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);
    }
}

Acum , problema este: în forbloc, eu trebuie sa transfere _MsgModella componenta. Între timp, eu nu știu cum să - l transfere încă.

Vă rog să mă ajute? Mulțumesc.

Întrebat 09/10/2019 la 13:02
sursa de către utilizator
În alte limbi...                            


1 răspunsuri

voturi
0

În cele din urmă, am găsit un mod ciudat și prost pentru a rezolva acest lucru.

Am adăuga aceste cod în 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);
                }
            }
        }

Și schimba forblocul ca aceasta:

@foreach (Models.MsgModel _MsgModel in MsgList)
    {
        if (_MsgModel.GetType() == typeof(ReceiveMsg))
        {
            <ReceiveMsg ShowFullImage="@ShowFullImage" TransferModel="_MsgModel"></ReceiveMsg>
        }
        else
        {
            <SendMsg ShowFullImage="@ShowFullImage" TransferModel="_MsgModel"></SendMsg>
        }
    }  

Ce prost mod este!

Publicat 09/10/2019 la 15:35
sursa de către utilizator

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