C# 将数据从局部视图传递到控制器操作

C# 将数据从局部视图传递到控制器操作,c#,asp.net-mvc,partial-views,html-helper,C#,Asp.net Mvc,Partial Views,Html Helper,我有一个强类型的局部视图,它以列表格式显示输出。我想在数据库中插入部分视图中的数据。我正在努力在部分视图中循环行,并将它们发送到控制器操作以插入到数据库中。这是我到目前为止所拥有的 部分: <%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<IEnumerable<Student.Models.vwStudent>>" %> <table> <

我有一个强类型的局部视图,它以列表格式显示输出。我想在数据库中插入部分视图中的数据。我正在努力在部分视图中循环行,并将它们发送到控制器操作以插入到数据库中。这是我到目前为止所拥有的

部分:

<%@ 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>

学生证
逾期金额
逾期日
以下是我在master中访问上述部分的方式:

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

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

        }
[HttpPost()]
公共行动结果保存学生意见(I无数学生)
{
DataContext db=新的DataContext();
foreach(Student.Models.vwStudent-in-Student){
发票库存=新发票();
{
Inv.StudentID=student.StudentID;
Inv.pastdeaumount=student.pastdeaumount;
Inv.PastDueDays=student.PastDueDays;
};
db.发票插入提交(Inv);
}
db.SubmitChanges();
返回视图();
}
在局部视图中,列出了多个学生(2,3,4..行)。当我点击“保存”按钮时,我只能保存部分(第一行)中列出的第一个学生,我如何循环通过部分中列出的剩余学生来保存他们


提前感谢。

您的绑定有误,您可以从这个示例绑定开始,很抱歉,如果有任何拼写错误,我正在编辑器中键入

更新:

你的部分:

<%@ 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>

学生证
逾期金额
逾期日
m、 ToList()[i].StudentID)%>
m、 ToList().ToList()[i].PastDueAntium)%%>
m、 ToList()[i].PastDueDays)%%>
您可以查看以下主要视图:

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


您的控制器:

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

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

        }
public ActionResult Index()
{
列出学生=新建列表();
添加(new vwstudion(){PastDueAmount=100,PastDueDays=“无”,StudentID=“ooooo”});
添加(new vwstustudent(){PastDueAmount=102,PastDueDays=“No”,StudentID=“Sollina”});
返回视图(学生);
}
[HttpPost]
公共行动结果索引(列出学生模型)
{
返回视图(studentModel);
}

尝试给出MVC绑定将识别为对象集合的输入名称:

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

然后,您可以使用
IEnumerable
作为您的模型类型,正如tsegay所描述的那样。

您需要对集合执行模型绑定。目前它只是绑定到单个值


签出:

它仍在向我的控制器操作传递null。我已更新了代码above@user793468检查此新更新,此更新建立在我的系统上,应适用于您。当我单击“提交”时,它仍将null传递给我的控制器操作。我已更新代码above@user793468:您似乎没有进行我建议的更改输入更新的代码。