c#ASP.NET MVC无法将模型的集合字段传递给控制器

时间:2016-02-16 17:44:36

标签: c# asp.net asp.net-mvc entity-framework razor

我有一个来自EF的课程。

public partial class Customer
{
    public Customer()
    {
        this.Customer_CustomerSpecialConcern = new HashSet<Customer_CustomerSpecialConcern>();
    }

    public int Id { get; set; }
    public string Name { get; set; }
    public string Surname { get; set; }
    public string Email { get; set; }
    public string Mobile { get; set; }
    public virtual ICollection<Customer_CustomerSpecialConcern> Customer_CustomerSpecialConcern { get; set; }
}

当我从控制器传递模型到视图时,一切正常(可以访问Customer_CustomerSpecialConcern值)。 问题是当我将模型发布回控制器以保存更改时,属性Customer_CustomerSpecialConcern为空。

以下是我在视图中使用它的方法。

@foreach (var ccsc in Model.Customer_CustomerSpecialConcern)
{
    <div class="form-group fields-container col-md-3">
        <label class="field-label control-label col-md-10" for="">@ccsc.CustomerSpecialConcern.Title</label>
        <div class="col-md-1 field-input">
            @Html.EditorFor(model => ccsc.Value)
            @Html.HiddenFor(model => ccsc.Value)
        </div>
    </div>
}

请,我需要帮助才能将此集合属性的值获取给控制器。谢谢。

更新 - Customer_CustomerSpecialConcern课程详情

public partial class Customer_CustomerSpecialConcern 
{ 
    public int Id { get; set; } 
    public int Customer_Id { get; set; } 
    public int CustomerSpecialConcern_Id { get; set; } 
    public bool Value { get; set; } 
    public virtual Customer Customer { get; set; } 
    public virtual CustomerSpecialConcern CustomerSpecialConcern { get; set; } 
}

1 个答案:

答案 0 :(得分:2)

请试试这个,

@for (int i = 0; i < Model.Customer_CustomerSpecialConcern.Count(); i++)
{
    <div class="form-group fields-container col-md-3">
        <label class="field-label control-label col-md-10" for="">@Model.CustomerSpecialConcern[i].Title</label>
        <div class="col-md-1 field-input">
            @Html.EditorFor(model => model.Customer_CustomerSpecialConcern[i].Value)
            @Html.HiddenFor(model => model.Customer_CustomerSpecialConcern[i].Value)
        </div>
    </div>
}

查看this文章。

我试过你的例子,这就是它的样子

public ActionResult Index()
        {
            var customer = new Customer
            {
                Name = "Name",
                Surname = "Surname",
                Email = "email@email.com",
                Mobile = "mobile...",
                Customer_CustomerSpecialConcern = new List<Customer_CustomerSpecialConcern>
                {
                    new Customer_CustomerSpecialConcern
                    {
                        Value = true
                    },
                    new Customer_CustomerSpecialConcern
                    {
                        Value = true
                    }
                }
            };

            return View(customer);
        }

查看:

@model WebApplication1.Models.Customer

@{
    ViewBag.Title = "Customer";
    var customer_CustomerSpecialConcern = Model.Customer_CustomerSpecialConcern.ToList();
}

@using (Html.BeginForm())
{
    @Html.AntiForgeryToken()
    for (int i = 0; i < Model.Customer_CustomerSpecialConcern.Count(); i++)
    {
        <div class="form-group fields-container col-md-3">
            <label class="field-label control-label col-md-10" for=""></label>
            <div class="col-md-1 field-input">
                @Html.CheckBoxFor(model => customer_CustomerSpecialConcern[i].Value)
            </div>
        </div>
    }
    <input type="submit" value="Save"/>
}