MVC 选项卡和分部视图
MVC Tabs and Partial Views
我是 MVC 的新手,并且拥有这个需要使用选项卡和局部视图的庞大应用程序。我有一个 ViewModel,其字段是我的 EF classes 的列表。我将此视图模型 class (ProjInfoVM) 传递到我的 ProjInfo 视图中。该视图有 3 个选项卡,它们是代表每个 EF 类 的表单 - 它们都需要 posted 返回才能提交。 我的第一个挑战 是让表格显示{我已经创建了 3 个强类型局部视图}但不知道如何显示它们,因为我不断收到错误消息:
传入字典的模型项是 'SMS2.Models.ProjectInfoVM' 类型的,但是这个字典需要一个 'SMS2.Models.ProjResc' 类型的模型项
我的第二个挑战 是如何 post 将各个表单返回给控制器 - 在这里我不知道如何实现...我需要帮助
下面是我的代码:
ProjInfoVM.cs
public partial class ProjectInfoVM
{
public ProjCourse ProjCourse { get; set; }
public ProjDocument ProjDocuments { get; set; }
public ProjResc ProjRescs { get; set; }
}
ProjResc 部分视图
@model SMS2.Models.ProjResc
@using (Html.BeginForm()) {
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)
<fieldset>
<legend>ProjResc</legend>
<div class="editor-label">
@Html.LabelFor(model => model.RescId)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.RescId)
@Html.ValidationMessageFor(model => model.RescId)
</div>
.....
<p>
<input type="submit" value="Create" />
</p>
</fieldset>
}
<div>
@Html.ActionLink("Back to List", "Index")
</div>
.....相同的格式适用于剩余的 2 个 Partial{_ProjDoc 和 _ProjCourses}
ProjResc.cs {同样适用于其他两个classes}
public partial class ProjResc
{
public int RescId { get; set; }
public int ProjectId { get; set; }
public Nullable<int> SponsorId { get; set; }
public decimal StipendAmt { get; set; }
public string StipendFreq { get; set; }
}
现在我的 ProjInfo 控制器和 Action ProjInfo 如下:
public ActionResult ProjInfo()
{
ProjectInfoVM vm = new ProjectInfoVM();
...Populate vm contents here....
return PartialView(vm);
}
我的 ProjInfo 视图如下...
@model SMS2.Models.ProjectInfoVM
@{
ViewBag.Title = "ProjInfo";
}
<div class="panel panel-default tabs">
<ul class="nav nav-tabs" role="tablist">
<li class="active"><a href="#tab-first" role="tab" data-toggle="tab">Project Resources</a></li>
<li><a href="#tab-second" role="tab" data-toggle="tab">Project Restrictions</a></li>
<li><a href="#tab-third" role="tab" data-toggle="tab">Project Documents</a></li>
<li><a href="#tab-four" role="tab" data-toggle="tab">Project Courses</a></li>
</ul>
<div class="panel-body tab-content">
<div class="tab-pane active" id="tab-first">
<h2>Partial View content : @Model.ProjCourse.CourseName</h2>
@Html.Partial("_ProjCourse", Model.ProjCourse)
</div>
<div class="tab-pane" id="tab-second">
@Html.Partial("_ProjResc", Model.ProjResc)
</div>.......
我一直收到这个错误..
The model item passed into the dictionary is of type 'SMS2.Models.ProjectInfoVM', but this dictionary requires a model item of type 'SMS2.Models.ProjResc'
有人可以阐明我完全想念它的地方吗...拜托
在部分视图中,您有 @model SMS2.Models.ProjResc,应将其更改为 @model ProjectInfoVM
对于第二部分检查 Html.BeginForm() 的重载,您可以指定控制器和将处理您的 post 的操作。
希望有帮助
我是 MVC 的新手,并且拥有这个需要使用选项卡和局部视图的庞大应用程序。我有一个 ViewModel,其字段是我的 EF classes 的列表。我将此视图模型 class (ProjInfoVM) 传递到我的 ProjInfo 视图中。该视图有 3 个选项卡,它们是代表每个 EF 类 的表单 - 它们都需要 posted 返回才能提交。 我的第一个挑战 是让表格显示{我已经创建了 3 个强类型局部视图}但不知道如何显示它们,因为我不断收到错误消息: 传入字典的模型项是 'SMS2.Models.ProjectInfoVM' 类型的,但是这个字典需要一个 'SMS2.Models.ProjResc' 类型的模型项 我的第二个挑战 是如何 post 将各个表单返回给控制器 - 在这里我不知道如何实现...我需要帮助
下面是我的代码:
ProjInfoVM.cs
public partial class ProjectInfoVM
{
public ProjCourse ProjCourse { get; set; }
public ProjDocument ProjDocuments { get; set; }
public ProjResc ProjRescs { get; set; }
}
ProjResc 部分视图
@model SMS2.Models.ProjResc
@using (Html.BeginForm()) {
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)
<fieldset>
<legend>ProjResc</legend>
<div class="editor-label">
@Html.LabelFor(model => model.RescId)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.RescId)
@Html.ValidationMessageFor(model => model.RescId)
</div>
.....
<p>
<input type="submit" value="Create" />
</p>
</fieldset>
}
<div>
@Html.ActionLink("Back to List", "Index")
</div>
.....相同的格式适用于剩余的 2 个 Partial{_ProjDoc 和 _ProjCourses}
ProjResc.cs {同样适用于其他两个classes}
public partial class ProjResc
{
public int RescId { get; set; }
public int ProjectId { get; set; }
public Nullable<int> SponsorId { get; set; }
public decimal StipendAmt { get; set; }
public string StipendFreq { get; set; }
}
现在我的 ProjInfo 控制器和 Action ProjInfo 如下:
public ActionResult ProjInfo()
{
ProjectInfoVM vm = new ProjectInfoVM();
...Populate vm contents here....
return PartialView(vm);
}
我的 ProjInfo 视图如下...
@model SMS2.Models.ProjectInfoVM
@{
ViewBag.Title = "ProjInfo";
}
<div class="panel panel-default tabs">
<ul class="nav nav-tabs" role="tablist">
<li class="active"><a href="#tab-first" role="tab" data-toggle="tab">Project Resources</a></li>
<li><a href="#tab-second" role="tab" data-toggle="tab">Project Restrictions</a></li>
<li><a href="#tab-third" role="tab" data-toggle="tab">Project Documents</a></li>
<li><a href="#tab-four" role="tab" data-toggle="tab">Project Courses</a></li>
</ul>
<div class="panel-body tab-content">
<div class="tab-pane active" id="tab-first">
<h2>Partial View content : @Model.ProjCourse.CourseName</h2>
@Html.Partial("_ProjCourse", Model.ProjCourse)
</div>
<div class="tab-pane" id="tab-second">
@Html.Partial("_ProjResc", Model.ProjResc)
</div>.......
我一直收到这个错误..
The model item passed into the dictionary is of type 'SMS2.Models.ProjectInfoVM', but this dictionary requires a model item of type 'SMS2.Models.ProjResc'
有人可以阐明我完全想念它的地方吗...拜托
在部分视图中,您有 @model SMS2.Models.ProjResc,应将其更改为 @model ProjectInfoVM
对于第二部分检查 Html.BeginForm() 的重载,您可以指定控制器和将处理您的 post 的操作。 希望有帮助