通过与MVC剃刀列表对象 [英] Pass list objects with MVC Razor

查看:152
本文介绍了通过与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 =形横,角色= 形式}))
{
    < D​​IV CLASS =表单组>
        <标签=inputSpeaker级=COL-SM-2控制标签>
             喇叭< /标签>
        < D​​IV 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>
    }
    < /表>< D​​IV CLASS =表单组>
    < D​​IV CLASS =COL-SM-10>
        <按钮式=提交级=BTN BTN-INFO>
         <跨度类=glyphicon glyphicon-OK>< / SPAN>提交< /按钮>
     < / DIV>
< / DIV>}


解决方案

您必须使用替代的foreach和使用隐藏的。我已经测试了以下和作品完美

  @model ServiceAttendance@ {
    ViewBag.Title =考勤;
}< H2>考勤LT; / H>@using(Html.BeginForm())
{
    < D​​IV CLASS =表单组>
        <标签=inputSpeaker级=COL-SM-2控制标签>
            扬声器
        < /标签>
        < D​​IV 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>
        }
    < /表>    < D​​IV CLASS =表单组>
        < D​​IV 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆