IEnumerable Ошибка при просмотре с частичной загрузкой - PullRequest
1 голос
/ 17 июня 2019

Я пытаюсь создать представление в своем приложении, которое выполняет основные команды CRUD в ASP.NET Core, чтобы научить себя некоторым новым навыкам.Однако я застрял и был бы признателен за помощь, пожалуйста.

Я бы хотел, чтобы каждый «компонент» приложения находился в частичном представлении для технического обслуживания в будущем.Я изначально заставил мое представление Index использовать объявление типа IEnumerable (для каждого цикла):

@model IEnumerable<Project.Web.Models.Sample.SampleModel>

, которое отлично работало для возврата списка и рендеринга страницы, но затем при попыткечтобы мое модальное окно было частично загружено на страницу и вставлено с помощью функции «CreateSample» на контроллере, оно не подхватывало функцию и завершилось неудачно при вставке (действие формы не найдено).Затем, если я попытаюсь добавить:

@model Project.Web.Models.Sample.SampleModel

на страницу представления CreateModal, она выдаст ошибку и даже не позволит мне визуализировать страницу, я предполагаю, что из-за частичной загрузки приложение выглядит как имеющее два объявления SampleModel,Если я создаю эту страницу полностью отдельной и не частично загруженной обычным объявлением @model, это работает.

Пока у меня есть базовая настройка, и я включил свой код для каждой из них ниже.

Модель - SampleModel

public class SampleModel
    {
        public int Id { get; set; }
        public string SampleText { get; set; }
    }

Контроллер - SampleController

public class SampleController : Controller
    {
        public const string ControllerName = "Sample";
        //Open Database Connection
        private _DBContext DBDatabase = new _DBContext ();

        public ActionResult Index()
        {
            var Model = DBDatabase.Sample.Select(s => new SampleModel
            {
                Id = s.Id,
                SampleText = s.SampleText
            }).ToList();

            return PartialView(Model);
        }

        [ActionName("_CreateModal")]
        public ActionResult InsertNewRecord()
        {
            var Model = DBDatabase.Sample.Select(s => new SampleModel
            {
                Id = s.Id,
                SampleText = s.SampleText
            }).ToList();

            return PartialView("_CreateModal", Model);
        }

Просмотры - индекс, просмотр, создание

Индекс - Вызывает частичное представление для просмотра и создания

@using Project.Web.Controllers
@model Project.Web.Models.Sample.SampleModel
<!--html stuff here -->
@await Html.PartialAsync("_CreateModal")
<!--more html stuff here -->
@await Html.PartialAsync("_ViewData")

Просмотр - Переход к циклам записей

@model Project.Web.Models.Sample.SampleModel

<table style="width: 100%;" id="example">
    <thead>
        <tr>
            <th>#</th>
            <th>Sample Text</th>
            <th class="text-center">Status</th>
            <th class="text-center">Actions</th>
        </tr>
    </thead>
    <tbody>
        @foreach (var sample in Model)
        {
            <tr>
                <th scope="row">@sample.Id</th>
                <td>@sample.SampleText</td>
                <td class="text-center">
                    <div class="badge badge-success">Active</div>
                </td>
                <td class="text-center">
                    <div role="group" class="btn-group-sm btn-group">
                        <button class="btn-shadow btn btn-primary">Edit</button>
                        <button class="btn-shadow btn btn-primary">Delete</button>
                    </div>
                </td>
            </tr>
        }
    </tbody>
</table>

Создать - Вставить новую запись

@model Project.Web.Models.Sample.SampleModel

<form method="post" asp-action="/SampleModel/CreateSample">
                    <div class="form-group">
                        <label for="CreationTime">SampleText</label>
                        <div>
                            <input type="text" class="form-control" id="SampleText" name="SampleText" placeholder="SampleText">
                        </div>
                    </div>
                    <div class="form-group">
                        <button type="submit" class="btn btn-primary">Sign up</button>
                    </div>
                </form>

1 Ответ

2 голосов
/ 17 июня 2019

Согласно комментарию Аммара, вы просто скопировали доступ к данным контроллера индекса. При создании формы, позволяющей пользователю создать один новый элемент, шаблон обычно должен предварительно создать пустую модель и передать ее в представление:

[ActionName("_CreateModal")]
public ActionResult InsertNewRecord()
{
    var model = new SampleModel(); // If Id is a GUID, then you could assign one here

    return PartialView("_CreateModal", model);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...