通过与MVC剃刀列表对象 [英] Pass list objects with MVC Razor
本文介绍了通过与MVC剃刀列表对象的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我使用一个对象,但对象里面我有一个属性是对象的列表。我想通过与列表对象里面对象,但该列表是空的,当我提交表单。
我不知道如何处理这个问题。
类
公共类VSTAttendance
{
公众诠释MEMBERID {搞定;组; }
公共字符串名称{;组; }
公共字符串姓氏{搞定;组; }
公共BOOL话务员{搞定;组; }
}公共类ServiceAttendance
{
公众诠释AttendanceID {搞定;组; }
公众诠释AttendanceTypeID {搞定;组; }
公共字符串AttendanceType {搞定;组; }
公共服务的DateTime {搞定;组; }
公众诠释服务ID {搞定;组; }
公共字符串音箱{搞定;组; }
公共字符串位置{搞定;组; }
公众诠释人数{搞定;组; }
公众诠释类别ID {搞定;组; }
公共字符串描述{搞定;组; }
公共字符串ChurchNotes {搞定;组; }
公共字符串ServingNotes {搞定;组; }
公众的DateTime dateCreated会获得{;组; }
公众的DateTime CreatedBy {搞定;组; }
公众的DateTime DateUpdate {搞定;组; }
公众的DateTime UpdateBy {搞定;组; }
公开名单< VSTAttendance> MemberAttendance {搞定;组; }
}
HTML
@using(Html.BeginForm(考勤,家,FormMethod.Post,新{RETURNURL = ViewBag.ReturnUrl,@class =形横,角色= 形式}))
{
< DIV CLASS =表单组>
<标签=inputSpeaker级=COL-SM-2控制标签>
喇叭< /标签>
< DIV CLASS =COL-SM-6>
@ Html.TextBoxFor(M = GT; m.Speaker,新{@class =表格控,占位符=扬声器,键入=文字,要求=需要})
< / DIV>
< / DIV><表类=表表边框的表格冷凝表悬停>
< TR类=警告>
< TD>< / TD>
< TD>名称和LT; / TD>
< TD>&姓LT; / TD>
< / TR>
@foreach(在Model.MemberAttendance VAR项)
{
&所述; TR>
< TD> @ Html.CheckBox(话务员)< / TD>
< TD> @ item.Name< / TD>
< TD> @ item.Surname< / TD>
< / TR>
}
< /表>< DIV CLASS =表单组>
< DIV CLASS =COL-SM-10>
<按钮式=提交级=BTN BTN-INFO>
<跨度类=glyphicon glyphicon-OK>< / SPAN>提交< /按钮>
< / DIV>
< / DIV>}
解决方案
您必须使用替代的foreach和使用隐藏的。我已经测试了以下和作品完美
@model ServiceAttendance@ {
ViewBag.Title =考勤;
}< H2>考勤LT; / H>@using(Html.BeginForm())
{
< DIV CLASS =表单组>
<标签=inputSpeaker级=COL-SM-2控制标签>
扬声器
< /标签>
< DIV CLASS =COL-SM-6>
@ Html.TextBoxFor(modelItem => modelItem.Speaker)
< / DIV>
< / DIV> <表类=表表边框的表格冷凝表悬停>
< TR类=警告>
< TD>< / TD>
< TD>名称和LT; / TD>
< TD>&姓LT; / TD>
< / TR>
@for(INT I = 0; I< Model.MemberAttendance.Count;我++)
{
&所述; TR>
< TD> @ Html.CheckBoxFor(IT = GT; Model.MemberAttendance [I] .Attendant)
@ Html.HiddenFor(IT = GT; Model.MemberAttendance [I] .Attendant)
< / TD>
< TD> @ Model.MemberAttendance [I] .Name点
@ Html.HiddenFor(IT = GT; Model.MemberAttendance [I] .Name点)LT; / TD>
< TD> @ Model.MemberAttendance [I] .Surname
@ Html.HiddenFor(IT = GT; Model.MemberAttendance [I] .Surname)LT; / TD>
< / TR>
}
< /表> < DIV CLASS =表单组>
< DIV CLASS =COL-SM-10>
<按钮式=提交级=BTN BTN-INFO>
<跨度类=glyphicon glyphicon-OK>< / SPAN>提交
< /按钮>
< / DIV>
< / DIV>}
所以,你必须做的就是用下面的
更换的foreach @for(INT I = 0; I< Model.MemberAttendance.Count;我++)
{
&所述; TR>
< TD> @ Html.CheckBoxFor(IT = GT; Model.MemberAttendance [I] .Attendant)
@ Html.HiddenFor(IT = GT; Model.MemberAttendance [I] .Attendant)
< / TD>
< TD> @ Model.MemberAttendance [I] .Name点
@ Html.HiddenFor(IT = GT; Model.MemberAttendance [I] .Name点)LT; / TD>
< TD> @ Model.MemberAttendance [I] .Surname
@ Html.HiddenFor(IT = GT; Model.MemberAttendance [I] .Surname)LT; / TD>
< / TR>
}
I am using an object but inside object I have a property that is a list of objects. I want to pass that object with the list objects inside it but the list is empty when I submit my form. I am not sure how to handle this.
Class
public class VSTAttendance
{
public int MemberID { get; set; }
public string Name { get; set; }
public string Surname { get; set; }
public bool Attendant { get; set; }
}
public class ServiceAttendance
{
public int AttendanceID { get; set; }
public int AttendanceTypeID { get; set; }
public string AttendanceType { get; set; }
public DateTime Service { get; set; }
public int ServiceID { get; set; }
public string Speaker { get; set; }
public string Location { get; set; }
public int HeadCount { get; set; }
public int CategoryID { get; set; }
public string Description { get; set; }
public string ChurchNotes { get; set; }
public string ServingNotes { get; set; }
public DateTime DateCreated { get; set; }
public DateTime CreatedBy { get; set; }
public DateTime DateUpdate { get; set; }
public DateTime UpdateBy { get; set; }
public List<VSTAttendance> MemberAttendance { get; set; }
}
HTML
@using (Html.BeginForm("Attendance", "Home", FormMethod.Post, new { ReturnUrl = ViewBag.ReturnUrl, @class = "form-horizontal", role = "form" }))
{
<div class="form-group">
<label for="inputSpeaker" class="col-sm-2 control-label">
Speaker</label>
<div class="col-sm-6">
@Html.TextBoxFor(m => m.Speaker, new { @class = "form-control", placeholder = "Speaker", type = "text", required = "required " })
</div>
</div>
<table class="table table-bordered table-condensed table-hover">
<tr class="warning">
<td></td>
<td>Name</td>
<td>Surname</td>
</tr>
@foreach (var item in Model.MemberAttendance)
{
<tr>
<td>@Html.CheckBox("Attendant")</td>
<td>@item.Name</td>
<td>@item.Surname</td>
</tr>
}
</table>
<div class="form-group">
<div class="col-sm-10">
<button type="submit" class="btn btn-info">
<span class="glyphicon glyphicon-ok"></span>Submit</button>
</div>
</div>
}
解决方案
You have to use for instead of foreach and use Hidden for . I have tested the following and works perfect
@model ServiceAttendance
@{
ViewBag.Title = "Attendance";
}
<h2>Attendance</h2>
@using (Html.BeginForm())
{
<div class="form-group">
<label for="inputSpeaker" class="col-sm-2 control-label">
Speaker
</label>
<div class="col-sm-6">
@Html.TextBoxFor(modelItem => modelItem.Speaker)
</div>
</div>
<table class="table table-bordered table-condensed table-hover">
<tr class="warning">
<td></td>
<td>Name</td>
<td>Surname</td>
</tr>
@for (int i=0;i<Model.MemberAttendance.Count ;i++)
{
<tr>
<td>@Html.CheckBoxFor(it=>Model.MemberAttendance[i].Attendant)
@Html.HiddenFor(it => Model.MemberAttendance[i].Attendant)
</td>
<td>@Model.MemberAttendance[i].Name
@Html.HiddenFor(it => Model.MemberAttendance[i].Name)</td>
<td>@Model.MemberAttendance[i].Surname
@Html.HiddenFor(it=>Model.MemberAttendance[i].Surname)</td>
</tr>
}
</table>
<div class="form-group">
<div class="col-sm-10">
<button type="submit" class="btn btn-info">
<span class="glyphicon glyphicon-ok"></span>Submit
</button>
</div>
</div>
}
So what you have to do is replace the foreach with the following
@for (int i=0;i<Model.MemberAttendance.Count ;i++)
{
<tr>
<td>@Html.CheckBoxFor(it=>Model.MemberAttendance[i].Attendant)
@Html.HiddenFor(it => Model.MemberAttendance[i].Attendant)
</td>
<td>@Model.MemberAttendance[i].Name
@Html.HiddenFor(it => Model.MemberAttendance[i].Name)</td>
<td>@Model.MemberAttendance[i].Surname
@Html.HiddenFor(it=>Model.MemberAttendance[i].Surname)</td>
</tr>
}
这篇关于通过与MVC剃刀列表对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文