Database “如何修复错误”;“系统无效操作例外”;偏袒

Database “如何修复错误”;“系统无效操作例外”;偏袒,database,asp.net-mvc-4,model,partial-views,Database,Asp.net Mvc 4,Model,Partial Views,您好,我正在尝试将数据库条目表单添加到显示从我的数据库检索到的信息的页面上的模式中,我使用visual Studio创建了一个脚手架模板,其中包含所有模型信息,然后我将其放入局部视图中以通过模型显示,但我一直遇到以下错误: System.InvalidOperationException The model item passed into the dictionary is of type 'System.Collections.Generic.List`1[TerminalHost.Mod

您好,我正在尝试将数据库条目表单添加到显示从我的数据库检索到的信息的页面上的模式中,我使用visual Studio创建了一个脚手架模板,其中包含所有模型信息,然后我将其放入局部视图中以通过模型显示,但我一直遇到以下错误:

System.InvalidOperationException

The model item passed into the dictionary is of type 'System.Collections.Generic.List`1[TerminalHost.Models.buildingInfo]', but this dictionary requires a model item of type 'TerminalHost.Models.buildingInfo'"
这是我的主页:

@model IEnumerable<TerminalHost.Models.buildingInfo>

@{
ViewBag.Title = "Home Page";
}
<h3>We suggest the following:</h3>
<ol class="round">
<li class="one">
    <h5>Please begin creating your network structure:</h5> 
    <button id="modal-opener">Add a new building</button>
</li>
<li class="two">

</li>
</ol>

<div class="Container">

    <div class="Box1">
        @foreach (var item in Model)
        {<div>
            <h4 class="Heading">@item.buildingName</h4>
            <h4 class="Heading">@item.buildingNumber</h4>
            <p>@item.buildingDesc1</p>
            <p>@item.buildingDesc2</p>
            <p>@item.buildingDesc3</p>
        </div>
        }
    </div>
    ....
</div>

<div id="Modal" title="Building Details">

@Html.Partial("buildingForm")

</div>

错误说明了问题所在

当您传递
列表时,您的局部视图需要类型为
TerminalHost.Models.buildingInfo
Model

这意味着您正在返回
列表
,但在您的局部视图中:

@model TerminalHost.Models.buildingInfo
替换为:

@model List<TerminalHost.Models.buildingInfo>
您的部分视图的名称应为buildingForm.cshtml,并且应位于视图>>主页中

@model TerminalHost.Models.buildingInfo

@{
    ViewBag.Title = "Create";
    Layout = null;
}

<h2>Create</h2>

@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)

<fieldset>
    <legend>buildingInfo</legend>

    <div class="editor-label">
        @Html.LabelFor(model => model.buildingNumber)
    </div>
    <div class="editor-field">
        @Html.EditorFor(model => model.buildingNumber)
        @Html.ValidationMessageFor(model => model.buildingNumber)
    </div>
    ....
    </div>
    <p>
        <input type="submit" value="Create" />
    </p>
 </fieldset>
}
<div>
    @Html.ActionLink("Back to List", "Index")
</div>
@section Scripts {
@Scripts.Render("~/bundles/jqueryval")
}

关于所需内容,如果希望在主
视图中显示列表,则需要对操作进行一些更改:

public ActionResult building()
{
    var buildingModel = _db.buildings.ToList();//you have to remove the FirstOrDefault() extension method

    return View(buildingModel);
}
在您看来,替换这一行:

 @Html.Partial("buildingForm")
据此:

 @Html.Partial("buildingForm", new buildingInfo()) //
由于局部视图需要一个对象,因此您可以从此线通过。
我希望这会有帮助

错误显示全部,当您传递
List
remove
FirstOrDefault()
时,您的局部视图期望
TerminalHost.Models.buildingInfo
作为模型,当视图需要时,它将抛出expection
IEnumerable
我从控制器中删除了这一行:var buildingModel=_db.buildings.ToList();这就是原因,但现在我无法在我的主页上检索数据。在局部视图顶部添加
@model List
我的意思是将
@model TerminalHost.Models.buildingInfo
替换为
@model List
我将其放入,但现在它找不到@Html.LabelFor(model=>model.buildingNumber)。错误:System.Collections.Generic.List'不包含“buildingNumber”的定义,并且没有扩展方法“buildingNumber”要执行此操作,您需要返回一个对象而不是List..
var buildingModel=_db.buildings.ToList().FirstOrDefault()但是有一件事,创建/插入模式弹出,其中包含所有内容,但没有插入到数据库中。我已经模拟了创建的脚手架模板。我缺少一个代码和平[HttpPost][ValidateAntiForgeryToken]公共操作结果构建表单(buildingInfo buildingInfo){if(ModelState.IsValid){u db.buildings.Add(buildingInfo);_db.SaveChanges()}返回部分视图(buildingInfo)}我想这会保存数据,但它不起作用,有什么线索吗?在您的局部视图中,将这一行“@using(Html.BeginForm())”更改为:@using(Html.BeginForm(“buildForm”,“Home”)”``因为我猜上面的操作在
HomeController
中。在数据库中保存后,您可以重定向到操作,而不是返回PartialView。但是要先尝试第一个改变,然后再尝试第二个改变
public ActionResult building()
    {
        var buildingModel = _db.buildings.ToList();

        return View(buildingModel);
    }
public ActionResult building()
{
    var buildingModel = _db.buildings.ToList();//you have to remove the FirstOrDefault() extension method

    return View(buildingModel);
}
 @Html.Partial("buildingForm")
 @Html.Partial("buildingForm", new buildingInfo()) //