Как отобразить файл JSON в веб-сетке, не загружая его в базу данных с помощью ASP.NET MVC? - PullRequest
0 голосов
/ 15 мая 2019

В настоящее время я работаю над проектом, в который я хочу загрузить файл (на самом деле не загружать, а выбрать по функции загрузки) и отобразить данные этого файла в виде веб-сетки на мой взгляд. Что я получил так далеко:

My View для загрузки файла JSON:

enter image description here

После загрузки я извлекаю ключи этого файла JSON:

enter image description here

Эти данные, которые я хочу отобразить в WebGrid, не загружая их в базу данных, кто-нибудь знает, как это сделать?

Просмотреть код пока что:

@model List<APIBrokerFrontend.Models.JsonModel>
@{
ViewBag.Title = "Api Broker";
if (Session["userID"] == null)
{
    Response.Redirect("~/Login/Index");
}
var grid = new WebGrid(canPage: true, rowsPerPage: 10);
grid.Bind(source: Model, rowCount: ViewBag.TotalRows, autoSortAndPage: false);
}
<!DOCTYPE html>

<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Index</title>
<link href="~/Content/bootstrap.min.css" rel="stylesheet" />
<link href="https://gitcdn.github.io/bootstrap-toggle/2.2.2/css/bootstrap-toggle.min.css" rel="stylesheet">
</head>
<body>
<div class="row">
    <div class="col-lg-5 d-flex align-items-stretch">
        <h2>API Broker</h2>
    </div>
    <div class="row" id="content1">
        <div class="col-lg-6 d-flex align-items-stretch">
        </div>
        <!--Search field and button-->
        <div class="col-sm-5 d-flex align-items-stretch" style="padding-top: 5%;">
            @using (Html.BeginForm("Import", "Mapper", FormMethod.Post, new { enctype = "multipart/form-data" }))
            {
                <div class="form-group" style="padding-left: 12%;">
                    <p>JSON File: <input type="file" name="jsonFile" /></p>
                    <input type="submit" value="Import" />
                </div>
            }
        </div>
        <div class="row" id="content2">
            <div class="col-lg-12 d-flex align-items-stretch">
                @grid.Table(tableStyle: "table table-responsive table-striped table-bordered",
                columns: grid.Columns(
                  grid.Column(columnName: "Key", header: "Keys", format:@<text><div class="" data-id="@item.Key" data-propertyname="Key">@item.Key</div></text>)
            )
        )
            </div>
            <!--Pagerlist for webgrid-->
            <div class="col-lg-12 d-flex align-items-stretch">
                @grid.PagerList(mode: WebGridPagerModes.All, paginationStyle: "pagination pagination-small pagination-right")
            </div>

            @Html.Hidden("dir", grid.SortDirection)
            @Html.Hidden("col", grid.SortColumn)
        </div>
    </div>
</div>
</body>
</html>

Код контроллера:

public class MapperController : Controller
{
    // GET: Mapper
    public ActionResult Index()
    {
        return View();
    }

    public ActionResult Import(HttpPostedFileBase jsonFile)
    {
        if (!Path.GetFileName(jsonFile.FileName).EndsWith(".json"))
        {
            ViewBag.ErrorMessage = "No JSON file";
            return View();
        }
        else
        {
            List<string> jsonData = new List<string>();
            using (System.IO.StreamReader reader = new System.IO.StreamReader(jsonFile.InputStream))
            {

                using (JsonTextReader jsonReader = new JsonTextReader(reader))
                {
                    JObject o2 = (JObject)JToken.ReadFrom(jsonReader);
                    List<string> keys = o2.Properties().Select(p => p.Name).ToList();
                    var data = keys;
                    return View(keys);
                }
            }
        }
    }
}

Надеюсь, кто-нибудь может помочь,

Заранее спасибо!

1 Ответ

0 голосов
/ 15 мая 2019

Это зависит от того, насколько быстро вы хотите, чтобы данные были.Если вы не загружаете его в какую-либо форму хранения, я предполагаю, что его использование будет очень коротким.Следовательно, то, что вы можете сделать, это кэшировать данные или, что еще проще, сохранить данные как json в объекте TempData , который затем можно извлечь из того же объекта TempData для использования на той же или другой странице MVC.

Кроме того, если вы решили сохранить его как json, вы всегда можете проанализировать его обратно в тип объекта, используя NewtonSoft.Надеюсь это поможет.Ура! * * 1005

...