2012-07-17 185 views
1

我有一個強類型局部視圖,以列表格式顯示輸出。我想從數據庫中的部分視圖插入數據。我正在努力循環遍歷部分視圖中的行,並將它們發送到控制器操作以插入到數據庫中。以下是我迄今爲止將數據從局部視圖傳遞到控制器動作

部分:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<IEnumerable<Student.Models.vwStudent>>" %> 

<table> 
     <tr> 
      <th> 
       Student ID 
      </th>   
      <th> 
       Past Due Amount 
      </th> 
      <th> 
       Past Due Days 
      </th>    
     </tr> 

     <% if (Model != null) 
      foreach (var item in Model) { %> 

     <tr> 
      <td> 
       <%=Html.TextBox("StudentID",item.StudentID) %> 
      </td> 

      <td> 
       <%=Html.TextBox("PastDueAmount",item.PastDueAmount) %> 
      </td> 
      <td> 
       <%=Html.TextBox("PastDueDays",item.PastDueDays) %> 
      </td>    
     </tr> 

    <% } %> 

    </table> 

這裏是我如何訪問上面的部分在主:

<div> 
<% using(Html.BeginForm("SaveStudentInvoice", "StudentInvoice")) %> 
<% { %> 
<div> 
<% Html.RenderPartial("DisplayStudentInvoiceList"); %> 
</div> 
<% } %> 
<br/> 
<input type="button" id="Submit" name="Submit" value="Submit" /> 
</div> 

控制器:

[HttpPost()] 
public ActionResult SaveStudentInvoice(IEnumerable<Student.Models.vwStudent> students) 
{ 
    DataContext db = new DataContext(); 

foreach(Student.Models.vwStudent student in students){ 

     Invoice Inv = new Invoice(); 
     { 
      Inv.StudentID= student.StudentID; 
      Inv.PastDueAmount= student.PastDueAmount; 
      Inv.PastDueDays= student.PastDueDays;     
     }; 

     db.Invoices.InsertOnSubmit(Inv); 
} 
     db.SubmitChanges(); 

     return View(); 

} 

在局部視圖,列出不止一個學生(2,3,4 ..行)。當我點擊「保存」按鈕時,我只能保存部分(第一行)中列出的第一個學生,如何循環部分列出的剩餘學生來保存它們?

在此先感謝。

回答

2

你有你的綁定錯誤,你可以從這個示例綁定開始,對不起,如果有任何錯字,我在編輯器本身輸入。

更新時間:

你的部分:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<IEnumerable<SaveStudentInvoice.Models.vwStudent>>" %> 

<table> 
     <tr> 
      <th> 
       Student ID 
      </th>   
      <th> 
       Past Due Amount 
      </th> 
      <th> 
       Past Due Days 
      </th>    
     </tr> 

     <% if (Model != null) 
    for (int i = 0; i < Model.Count(); i++) { %> 
     <tr> 
      <td> 
       <%=Html.TextBoxFor(m=>m.ToList()[i].StudentID) %> 
      </td> 

      <td> 
       <%=Html.TextBoxFor(m=>m.ToList().ToList()[i].PastDueAmount) %> 
      </td> 
      <td> 
       <%=Html.TextBoxFor(m=>m.ToList()[i].PastDueDays) %> 
      </td>    
     </tr> 

    <% } %> 

    </table> 

您的主視圖:

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server"> 
    <div> 
<% using(Html.BeginForm("Index","Home")) %> 
<% { %> 
<div> 
<% Html.RenderPartial("Partial",Model); %> 
</div> 
<br/> 
<input type="submit" id="Submit" name="Submit" value="Submit" /> 
<% } %> 

</div> 
</asp:Content> 

您控制器:

public ActionResult Index() 
     { 
      List<vwStudent> students = new List<vwStudent>(); 
      students.Add(new vwStudent() { PastDueAmount = 100, PastDueDays = "None", StudentID = "ooooo" }); 
      students.Add(new vwStudent() { PastDueAmount = 102, PastDueDays = "No", StudentID = "Sollina" }); 
      return View(students); 

     } 
     [HttpPost] 
     public ActionResult Index(List<vwStudent> studentModel) 
     { 

      return View(studentModel); 

     } 
+0

它仍然將null傳遞給我的控制器操作。我已經更新了我的代碼 – user793468 2012-07-17 21:45:13

+0

@ user793468我已經更新了我上面的答案。 – tkt986 2012-07-17 23:20:30

+0

@ user793468檢查這個新的更新,這是建立在我的系統上,應該爲你工作。 – tkt986 2012-07-17 23:51:02

1

先給你輸入名字的MVC結合將識別爲對象的集合:

 int index = 0; 
     foreach (var item in Model) { %> 
     <td> 
      <%=Html.TextBox(string.Format("Entry[{0}].StudentID", index), 
          item.StudentID) %> 
     </td> 
     ... 
    <% 
      i++; 
     } %> 

然後你可以使用一個IEnumerable<Student.Models.vwStudent>作爲模型類型,tsegay描述。

+0

當我單擊提交時,它仍將null傳遞給我的控制器操作。我已將我的代碼更新爲 – user793468 2012-07-17 21:49:56

+0

@ user793468以上:您似乎未在更新的代碼中進行推薦的更改。 – StriplingWarrior 2012-07-18 15:57:13

相關問題