Как вывести файл в представление при проверке формы? - PullRequest
0 голосов
/ 19 марта 2019

Я довольно новичок в создании приложений MVC, но у меня есть базовые знания.Я создаю страницу, на которой я могу добавлять и удалять текстовые файлы, но представление также содержит таблицу со списком всех элементов в текстовом файле.

Насколько я понимаю, я знаю, как читатьфайл, и вывести его в список, который я затем могу указать в модели и цикла в моем представлении, и я знаю, как проверить редактор.Я, однако, не могу понять, как сделать оба одновременно.

Пример:

Webpage

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

Модель:

using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;

namespace WebApplication2.Models
{
    public class UploadFiles
    {
        public List<string> Paygroups;

        [Required(ErrorMessage = "Please enter a paygroup.")]
        public string PayGroup { get; set; }
    }
}

Вид:

@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">
    <thead>
    <tr>
        <th>Paygroups</th>
    </tr>
    </thead>
    <tbody>
    <tr>
    @foreach (var paygroup in Model.Paygroups)
    {
        <td>@Model.Paygroups</td>
    }
    </tbody>
</table>

Контроллер:

using System.Collections.Generic;
using System.IO;
using System.Web.Mvc;
using WebApplication2.Models;

namespace WebApplication2.Controllers
{
    public class UpdateFilesController : Controller
    {
        // GET: Default
        public ActionResult Edit()
        {
            return View();
        }

        [HttpPost]
        public ActionResult Edit(string Paygroup)
        {
        if (ModelState.IsValid)
            { 
            var PG = new List<UploadFiles>
            {
                new UploadFiles
                {
                    PayGroup = System.IO.File.ReadAllText(Path.Combine(Server.MapPath("~/textfiles"), "paygroup.text"))
                }
            };
         }
            return View(model);
        }
    }
}

1 Ответ

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

Для того, чтобы как одна игровая группа, так и весь список отображались на одной странице, вы можете соответствующим образом изменить модель, сохранив как весь список в объекте List<string>, так и вновь добавленную игровую группу в объекте string.

public PaygroupViewModel
{
    public List<string> Paygroups;
    public string Paygroup;
}

В части form, где вы «генерируете» новую платежную группу, вам нужно сослаться на одно свойство Paygroup, которое также будет аргументом, передаваемым в HttpPostМетод действия (вместо всей модели)

В представлении:

@Html.EditorFor(m => m.Paygroup ... )

В контроллере:

[HttpPost]
public ActionResult Edit(string Paygroup)
{
    myPaygroupsList = new List<string>();

    // populate the list from file

    // add the new Paygroup to the list
    myPaygroupsList.Add(Paygroup);

    // now create the model:
    PaygroupViewModel model = new PaygroupViewModel() 
    {
        Paygroups = myPaygroupsList
    };
    Return view(model);
}

Затем, в представлении, вы можете легкопетля в списке моделей

@foreach (string paygroup in Model.Paygroups)
{ // build your table }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...