部分加载视图上的IEnumerable错误

时间:2019-06-17 09:10:03

标签: c# asp.net-core model-view-controller partial-views

我正在尝试在应用程序中创建一个视图,该视图在ASP.NET Core中执行基本的CRUD命令,以教会自己一些新技能。但是,我被困住了,请提供一些帮助。

我希望应用程序的每个“组件”都处于局部视图中,以进行后续维护。我最初让我的索引视图使用了IEnumerable类型的声明(用于每个循环):

prachanda

对于返回列表和呈现页面来说,这是完美的选择,但是当尝试将我的“模态”窗口部分加载到页面中并使用控制器上的“ CreateSample”功能插入数据时,它没有选择该功能,并且失败了插入(未找到表单操作)。如果我再尝试添加:

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

对于CreateModal视图页面,它引发一个错误,甚至不会让我呈现该页面,我认为是因为该应用程序的部分加载被视为具有两个SampleModel声明。如果我完全分开创建此页面,并且未部分加载正常的@model声明,那么它将起作用。

到目前为止,我已经完成了基本设置,并在下面包含了我的代码。

模型-SampleModel

@model Project.Web.Models.Sample.SampleModel

控制器-SampleController

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

视图-索引,视图,创建

索引-调用部分视图进行查看和创建

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

查看-Foreach循环记录

@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>

1 个答案:

答案 0 :(得分:2)

根据Ammar的评论,您刚刚复制粘贴了索引控制器的数据访问权限。构建允许用户创建单个新项目的表单时,模式通常是预先实例化一个空模型并将其传递给视图:

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

    return PartialView("_CreateModal", model);
}