簡體   English   中英

如何將數據從Controller傳遞到Blazor上的View?

[英]How I can pass data from Controller to Views on Blazor?

我嘗試使用Blazor(服務器端)創建一個項目,並將視圖創建為.razor,然后添加控制器。 如何將數據從控制器傳遞到視圖.razor?

我想我可以在控制器中創建一個公共變量,它將是Controller和.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>

來自Syncfusion的問候。

您可以使用“標頭”或“ ReasonPhrase”將來自控制器的數據傳遞到成功事件中的視圖,如下面的代碼示例所述。

[SampleDataController.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;
            }
        }

[index.razor]


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

我們已經准備好樣本並附在下面。

樣本鏈接: https : //www.syncfusion.com/downloads/support/directtrac/242743/ze/WebApplication6_additional_data-460323506

另外,當前我們正在努力為成功事件參數提供特定類型,並且此支持將包含在計划於2019年8月中旬發布的補丁程序中。感謝您在此之前的耐心等待。

您可以通過下面的反饋鏈接跟蹤問題的狀態。

鏈接: https //www.syncfusion.com/feedback/7647/need-to-provide-specific-type-for-success-event-arguments-in-the-uploader

問候,

卑詩省伯利

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM