Hvordan kan jeg overføre en modell til en Razor komponent i Blazor server-side?

stemmer
0

Jeg bruker Blazor server-side for å gjøre et chatterom.

For stilen motta meldingen, og sender meldingen er annerledes, jeg gjorde en modell som heter 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; }
    }
}

De kniv komponenter ReceiveMsg.razorog SendMsg.razorer base på denne modellen.

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


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

I index.razor, I wanna taste inn meldingsteksten og vise det umiddelbart.

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

Nå er problemet: i forblokken, skal jeg overføre _MsgModeltil komponenten. I mellomtiden, jeg vet ikke hvordan du skal overføre den ennå.

Vil du hjelpe meg? Takk skal du ha.

Publisert på 09/10/2019 klokken 13:02
kilden bruker
På andre språk...                            


1 svar

stemmer
0

Til slutt fant jeg en rar og dum måte å løse dette.

Jeg legger disse kode i 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);
                }
            }
        }

Og endre forblokk som dette:

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

Hva en dum måte det er!

Svarte 09/10/2019 kl. 15:35
kilden bruker

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