猿问

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

我尝试使用 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>


摇曳的蔷薇
浏览 104回答 1
1回答

大话西游666

此处支持同步融合。您可以使用“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();                });            });        }
随时随地看视频慕课网APP
我要回答