如何使用List <tuple <>&gt;作为动作方法参数?

时间:2015-11-25 11:15:38

标签: c# asp.net-mvc

我想向控制器发送一个List<Tupple<>>,但我做得不好,因为我总是收到消息No parameterless constructor defined for this object并且方法的代码没有被执行。

我正在使用一个类作为控制器参数的视图模型:

public class InsurancesHospitals
{
    public int hospital { get; set; }
    public List<Tuple<int, string, bool>> insurances { get; set; }
}

这是控制器:

[Authorize]
public ActionResult AssociateInsurances(InsurancesHospitals viewModel)
{
    foreach (var insurance in viewModel.insurances)
    {
        /*
            Here I do some things...
        */
    }

    return Redirect("/Hospitals/Index");
}

这是我称之为控制器的视图:

<form id="formulario" role="form" method="post" action="~/Hospitals/AssociateInsurances">

    <label class="control-label" for="hospital">Hospital</label>
    <select class="form-control" id="hospital" name="hospital">
        @foreach (var hospital in (IQueryable<HOSPITALS>)ViewData["hospitals"])
        {
            <option value="@hospital.ID" >@hospital.NAME</option>
        }
    </select>

    <div class="col-xs-12">
        <div class="row">
            @{
                var insurances = ((IQueryable<INSURANCES>)ViewData["insurances"]).ToList();

                for (var index=0; index < insurances.Count(); index++) 
                {
                    <input type="hidden" value="@insurances[index].ID" class="insurances" name="insurances[@index].Item1" />

                    <div class="col-xs-3">
                        <input type="checkbox" data-id="@insurances[index].ID" class="association" name="insurances[@index].Item3" />
                        @insurances[index].NAME
                    </div>

                    <div class="col-xs-3">
                        <input type="text"  data-id="@insurances[index].ID" class="form-control codes" name="insurances[@index].Item2" />
                    </div>
                }
            }
        </div>
    </div>

    <button class="btn btn-success" type="submit">
        <span>Associate</span>
    </button>
</form>

1 个答案:

答案 0 :(得分:3)

如错误所示:元组has no parameterless constructor,因此模型绑定器无法实例化它。

你可以采取艰难的方式:创建自己的模型绑定器,或者简单的方法:简单地引入一个包含适当属性的新类。这有一个额外的好处:实际有用的属性名称,而不是ItemN