разделение строки текстового файла и вывод каждого элемента в таблицу представления - PullRequest
0 голосов
/ 21 марта 2019

В настоящее время у меня есть текстовый файл, содержащий платежную группу и дату создания, разделенные конвейером, как показано в примере ниже

PG1 | 3/21/2019
PG2 | 3/21/2019
PG3 | 3/21/2019

Я пытаюсь разбить строку, чтобы можно было вывести что-то подобное, но с разбивкой по дате и помещенной в поле «Добавленная дата».

Table

Однако, когда я извлекаю данные, они попадают под один столбец.Как можно зациклить дату в списке, чтобы она отображалась рядом с нужной платежной группой?В настоящее время он разбит на части, поскольку он читается в массив, а затем помещается в список.Я не уверен, есть ли лучший, более оптимальный способ?

View

@model WebApplication2.Models.UploadFiles

@{
    ViewBag.Title = "Paygroup Edit";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

<h2>Update Paygroup</h2>

@using (Html.BeginForm("Edit", "UpdateFiles", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
    @Html.AntiForgeryToken()
    <div class="form-group">
        @Html.LabelFor(m => m.PayGroup, new { @class = "control-label" })
        @Html.EditorFor(m => m.PayGroup, new { htmlAttributes = new { @class = "form-control", placeholder = Html.DisplayNameFor(m => m.PayGroup) } })
        @Html.ValidationMessageFor(m => m.PayGroup, "", new { @class = "text-danger" })
        <input type="submit" value="Add" class="btn btn-default" />
        <input type="submit" value="Delete" class="btn btn-default" />
    </div>
}
<table class="table table-striped">
    <tr>
        <th>Paygroups</th>
        <th>Date added</th>
    </tr>
    @foreach (var pg in Model.Paygroups)
    {
        <tr>
            <td>@pg</td>
        </tr>

    }
    @foreach (var date in Model.DateAdded)
    {
        <tr>
            <td>@date</td>
        </tr>
    }
</table>

Контроллер

public class UpdateFilesController : Controller
    {
        // GET: Default
        public ActionResult Edit()
        {
            var fullpath = Path.Combine(Server.MapPath("~/sourcefiles"), "paygroup.txt");
            List<string> paygroupsList = new List<string>();
            List<string> DateList = new List<string>();
            string line;
            using (var sr = new StreamReader(fullpath))
            {
                while ((line = sr.ReadLine()) != null)
                {
                    string[] strArray = line.Split('|');
                    paygroupsList.Add(strArray[0]);
                    DateList.Add(strArray[1]);
                }
                UploadFiles model = new UploadFiles()
                {
                    Paygroups = paygroupsList,
                    DateAdded = DateList
                };
                return View(model);
            }
        }

Модель

public class UploadFiles
{
    public List<string> Paygroups { get; set; }
    public List<string> DateAdded { get; set; }
    [Required(ErrorMessage = "Please enter a paygroup.")]
    [Remote("DoesPaygroupExist", "UpdateFiles", HttpMethod = "POST", ErrorMessage = "Paygroup already exists!")]
    public string PayGroup { get; set; }

}

1 Ответ

1 голос
/ 21 марта 2019

Потому что вы фактически запрашиваете цикл для каждого столбца в отдельности.и ваша модель не разработана должным образом.

Модель должна выглядеть примерно так:

public class Groups
{
    [Required(ErrorMessage = "Please enter a paygroup.")]
    [Remote("DoesPaygroupExist", "UpdateFiles", HttpMethod = "POST", ErrorMessage = "Paygroup already exists!")]
    public string PayGroup { get; set; }
    public List<UploadFiles> files {get; set;}

}
public class UploadFiles
{
    public string Paygroup { get; set; }
    public string DateAdded { get; set; }


}

и ваша функция контроллера должна заполнить список UploadFiles

    public ActionResult Edit()
    {
        var fullpath = Path.Combine(Server.MapPath("~/sourcefiles"), "paygroup.txt");
        List<string> paygroupsList = new List<string>();
        List<string> DateList = new List<string>();
        string line;
        using (var sr = new StreamReader(fullpath))
        {
            List<UploadFiles> lst = new List<UploadFiles>()
            while ((line = sr.ReadLine()) != null)
            {
                string[] strArray = line.Split('|');
                UploadFiles model = new UploadFiles()
                {
                   Paygroups = strArray[0],
                   DateAdded = strArray[1]
                };
                lst.Add(model);
            }
            Groups group = new Groups();
            group.files = lst;
            return View(group);
        }
    }

Тогда, на ваш взгляд,Модель должна быть

@model WebApplication2.Models.Groups

<table class="table table-striped">
    <tr>
        <th>Paygroups</th>
        <th>Date added</th>
    </tr>
    @foreach (var record in Model.files)
    {
        <tr>
            <td>@record.Paygroup </td>
            <td>@record.DateAdded </td>
        </tr>

    }
</table>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...