2015-04-03 76 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