2015-04-03 81 views
0

我很新的MVC和有这个巨大的应用程序,需要使用标签和部分视图。我有一个ViewModel,其字段是我的EF类的列表。我将这个视图模型类(ProjInfoVM)传递到我的ProjInfo视图。该视图有3个选项卡,它们是表示每个EF类的表单 - 它们都需要被提交回来提交。 我的第一个挑战得到的形式显示{我已经创建了3个强类型的部分视图},但不知道如何显示它们,因为我不断收到错误: 传递到字典中的模型项目是'SMS2'类型。 Models.ProjectInfoVM',但是这个词典需要一个'SMS2.Models.ProjResc'类型的模型项' 我的第二个挑战是如何将各个表单发回给控制器 - 在这里我不知道如何实现这一点。 ..我需要帮助MVC标签和部分视图

下面是我的代码:

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偏{_ProjDoc和_ProjCourses}

ProjResc.cs {同样适用于其它两个类}

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控制器与行动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' 

有人可以阐明成在那里我在想念它产品总数...请

+0

你能告诉我们你的ProjInfo.cshtml视图吗?特别是@model语句。 并提交从这两个部分视图的所有领域,你应该包括他们在同一个表格块 – 2015-04-03 06:50:00

+0

我已经编辑它,以包括@model语句 – 2015-04-03 07:00:46

回答

0

在部分视图中,您有应该更改为@model的@model SMS2.Models.ProjResc ProjectInfoVM

第二部分检查Html.BeginForm()的重载,你可以指定控制器和处理你的帖子的动作。 希望有帮助

+0

谢谢....局部视图现在呈现正确....可以详细阐述关于如何让每个表单单独发布到控制器动作 – 2015-04-03 07:50:12

+0

谢谢..我得到了发布部分解决方案......通过在每个局部视图上单独创建一个表单并将其重定向到不同的控制器动作来实现......就像这样** @使用(Html.BeginForm(“ProjInfo”,“Project”,new {id = 1})) {。**谢谢 – 2015-04-03 09:07:32

+0

在标签中发布表单可能不是UI预期中最好的,因为会重新加载整个页面。你可以调查你如何调用相同的动作,但通过Ajax post请求使用jQuery – 2015-04-03 17:31:44