为了账号安全,请及时绑定邮箱和手机立即绑定

如何将数据从控制器传递到 Blazor 上的视图?

如何将数据从控制器传递到 Blazor 上的视图?

C#
摇曳的蔷薇 2023-07-09 15:10:04
我尝试使用 Blazor(服务器端)创建一个项目并将视图创建为 .razor,并且还添加了控制器。如何将数据从控制器传递到视图 .razor ?我想我可以在控制器中创建一个公共变量,这将是控制器和.razor 的交互。但我不知道代码I want get var u to the view//Controller[HttpPost("[action]")]public void Save(IList<IFormFile> UploadFiles){    var u = UploadFiles.FirstOrDefault().FileName;    long size = 0;    size = SaveUploadedFiles(UploadFiles, size);}//View<EjsUploader ID="UploadFiles">  <UploaderAsyncSettings SaveUrl="api/Save" RemoveUrl="api/Remove"></UploaderAsyncSettings></EjsUploader>
查看完整描述

1 回答

?
大话西游666

TA贡献1817条经验 获得超14个赞

此处支持同步融合。


您可以使用“Headers”或“ReasonPhrase”将数据从控制器传递到成功事件中的视图,如下面的代码示例中所述。


[示例数据控制器.cs]



public void Save(IList<IFormFile> UploadFiles)

        {

            long size = 0;

            try

            {

                foreach (var file in UploadFiles)

                {

                    var filename = ContentDispositionHeaderValue

                                        .Parse(file.ContentDisposition)

                                        .FileName

                                        .Trim('"');

                    filename = hostingEnv.ContentRootPath.Replace("WebApplication6.Server", "WebApplication6.Client") + $@"\{filename}";

                    size += (int)file.Length;

                    if (!System.IO.File.Exists(filename))

                    {

                        using (FileStream fs = System.IO.File.Create(filename))

                        {

                            file.CopyTo(fs);

                            fs.Flush();

                        }

                    }

                }

                Response.Headers.Add("custom-header", "Syncfusion");

                Response.HttpContext.Features.Get<IHttpResponseFeature>().ReasonPhrase = "Syncfusion Upload";

            }

            catch (Exception e)

            {

                Response.Clear();

                Response.StatusCode = 204;

                Response.HttpContext.Features.Get<IHttpResponseFeature>().ReasonPhrase = "File failed to upload";

                Response.HttpContext.Features.Get<IHttpResponseFeature>().ReasonPhrase = e.Message;

            }

        }

[索引.剃刀]



@using Newtonsoft.Json;

@using Newtonsoft.Json.Converters;


<EjsUploader Id="UploadFiles" AutoUpload="true" Success="@OnSuccess">

    <UploaderAsyncSettings SaveUrl="api/SampleData/Save" RemoveUrl="api/SampleData/Remove"></UploaderAsyncSettings>

</EjsUploader>

<p>Additional Header Text is: @HeaderData</p>

<p>Additional Response Data is: @ResponseData</p>


@code{

public string HeaderData;


public string ResponseData;


public void OnSuccess(object args)

{


    SuccessEventArgs eventArgs = JsonConvert.DeserializeObject<SuccessEventArgs>(args.ToString());

    HeaderData = eventArgs.Response.Headers;

    ResponseData = eventArgs.Response.StatusText;

    this.StateHasChanged();

}

//Success event args class.

public class SuccessEventArgs

{

    public object E { get; set; }

    public FileInfo File { get; set; }

    public string StatusText { get; set; }

    public string Name { get; set; }

    public string Operation { get; set; }

    public ResponseEventArgs Response { get; set; }

}


public class ResponseEventArgs

{

    public string Headers { get; set; }

    public object ReadyState { get; set; }

    public object StatusCode { get; set; }

    public string StatusText { get; set; }

    public bool withCredentials { get; set; }

}

}



And, you need to enable the allow header option in the Startup.cs file as mentioned in the below code example.



  public void ConfigureServices(IServiceCollection services)

        {

            services.AddMvc().AddNewtonsoftJson();

            services.AddResponseCompression(opts =>

            {

                opts.MimeTypes = ResponseCompressionDefaults.MimeTypes.Concat(

                    new[] { "application/octet-stream" });

            });

            services.AddCors(options =>

            {

                options.AddPolicy("EnableCORS", builder =>

                {

                    builder.AllowAnyOrigin().AllowAnyOrigin().AllowAnyHeader().AllowAnyMethod().AllowCredentials().Build();

                });

            });

        }


查看完整回答
反对 回复 2023-07-09
  • 1 回答
  • 0 关注
  • 103 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信