1

出力をリスト形式で表示する、厳密に型指定された部分ビューがあります。DBに部分ビューからデータを挿入したい。部分ビューで行をループし、それらをコントローラー アクションに送信して DB に挿入するのに苦労しています。これが私がこれまでに持っているものです

部分的:

<%@ 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 行)。「保存」ボタンをクリックすると、部分的にリストされている最初の生徒 (1 行目) しか保存できません。部分的にリストされている残りの生徒をループして保存するにはどうすればよいですか?

前もって感謝します。

4

3 に答える 3

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);

        }
于 2012-07-17T20:21:56.930 に答える
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 が説明するように、モデル タイプとしてan を使用できます。

于 2012-07-17T20:23:19.167 に答える
0

コレクションへのモデル バインディングを実行する必要があります。現時点では、単一の値にバインドしているだけです。

チェックアウト: http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx

于 2012-07-17T20:25:04.073 に答える