不明な量のチェックボックスをブール値のリストにバインドしようとしています。 検索の時間がたっても、私は解決策を見つけられませんでした。Asp.net MVCチェックボックスのデータをブール値のリストに入れる
これが私の見解では、コードのrelevent一部です:
@foreach (Device d in Data.GetDevices())
{
<label asp-for="NewRegistration.Devices">@d.Name</label>
<input asp-for="NewRegistration.Devices" class="checkbox" type="checkbox" />
}
ループは動作しますが、入力チェックボックスするならば、私はタイプを変更したときに、それは私にこのexeption与えた:
InvalidOperationExceptionがします:予期しない 'asp-for'式の結果の型 'System.Collections.Generic.List`1の[[System.Boolean、System.Private.CoreLib、Version = 4.0.0.0、Culture =ニュートラル、PublicKeyToken = 7cec85d7bea7798e]]' 'type'が 'checkbox'の場合、 'asp-for'は 'System.Boolean'型でなければなりません。
私は私のデータを入れてみてくださいリストは、次のコードが含まれています
private List<bool> _devices;
public List<bool> Devices
{
get { return _devices; }
set {_devices = value; }
}
だから私の質問は、私はブールの私のリストにこれらのチェックボックスから値を追加するにはどうすればよいです。私は入力の種類を指定していないとき、私はエラーは表示されませんが、入力の種類はテキストです。これらの入力ボックスで真または偽を入力すると、コードが正常に動作します。しかし、私は、trueまたはfalseを入力するようにユーザーに要求するのではなく、チェックボックスを必要とします。
ありがとうございました!
編集:私の質問は説明が難しいです。私はフォームを検証し、それをプレゼンテーションモデルのPMRegistrationで定義された登録クラスのインスタンスにバインドします。スニペットは十分に明らかにされていない場合、私は、以下の完全なコードを配置します
登録クラス:
public class Registration
{
public int Id { get; set; }
[Required(ErrorMessage = "required field")]
[MaxLength(50, ErrorMessage = "To long")]
[DisplayName("Name")]
public string Name { get; set; }
[Required(ErrorMessage = "required field")]
[MaxLength(50, ErrorMessage = "To long")]
[DisplayName("Firstname")]
public string FirstName { get; set; }
[Required(ErrorMessage = "required field")]
[Range(1,110 ,ErrorMessage = "To long")]
public string Age { get; set; }
[Required(ErrorMessage = "required field")]
[EmailAddress(ErrorMessage ="Not a valid email address")]
public string Email { get; set; }
[Required(ErrorMessage = "required field")]
[DisplayName("slot1")]
public int Slot1SessionId { get; set; }
[Required(ErrorMessage = "required field")]
[DisplayName("slot2")]
public int Slot2SessionId { get; set; }
[Required(ErrorMessage = "required field")]
[DisplayName("slot3")]
public int Slot3SessionId { get; set; }
private List<bool> _devices;
public List<bool> Devices
{
get { return _devices; }
set {_devices = value; }
}
[Required(ErrorMessage = "required field")]
[DisplayName("Organization")]
public int OrganizationId { get; set; }
public bool ClosingParty { get; set; }
}
私の見解は次のようになります。
@using week3.Models;
@model week3.Models.PresentationModels.PMRegistration
<div>
<h1>New Registration</h1>
<h2>registration</h2>
</div>
<form class="form-group" asp-controller="Registration" asp-action="New" method="post">
<div>
<label asp-for="NewRegistration.Name">Name:</label>
<input asp-for="NewRegistration.Name" class="form-control" value="@Model.NewRegistration.Name" />
<span asp-validation-for="NewRegistration.Name" class="text-danger"></span>
</div>
<div>
<label asp-for="NewRegistration.FirstName">Firstname:</label>
<input asp-for="NewRegistration.FirstName" class="form-control" value="@Model.NewRegistration.FirstName" />
<span asp-validation-for="NewRegistration.FirstName" class="text-danger"></span>
</div>
<div>
<label asp-for="NewRegistration.Age">Age:</label>
<input asp-for="NewRegistration.Age" class="form-control" value="@Model.NewRegistration.Age" />
<span asp-validation-for="NewRegistration.Age" class="text-danger"></span>
</div>
<div>
<label asp-for="NewRegistration.Email">Email:</label>
<input asp-for="NewRegistration.Email" class="form-control" value="@Model.NewRegistration.Email" />
<span asp-validation-for="NewRegistration.Email" class="text-danger"></span>
</div>
<div>
<div>Pick your sessions</div>
<label asp-for="NewRegistration.Slot1SessionId" class="form-label">Slot1:</label>
<select asp-for="NewRegistration.Slot1SessionId" class="form-control" asp-items="@Model.getSessionNamesBySlot(1)" value="@Model.NewRegistration.Slot1SessionId"></select>
<span asp-validation-for="NewRegistration.Slot1SessionId" class="text-danger"></span>
</div>
<div>
<label asp-for="NewRegistration.Slot2SessionId">Slot2:</label>
<select asp-for="NewRegistration.Slot2SessionId" class="form-control" asp-items="@Model.getSessionNamesBySlot(2)" value="@Model.NewRegistration.Slot2SessionId"></select>
<span asp-validation-for="NewRegistration.Slot2SessionId" class="text-danger"></span>
</div>
<div>
<label asp-for="NewRegistration.Slot3SessionId">Slot3:</label>
<select asp-for="NewRegistration.Slot3SessionId" class="form-control" asp-items="@Model.getSessionNamesBySlot(3)" value="@Model.NewRegistration.Slot3SessionId"></select>
<span asp-validation-for="NewRegistration.Slot3SessionId" class="text-danger"></span>
</div>
<div>are you wearing dangerous accessoires?</div>
@foreach (Device d in Data.GetDevices())
{
<label asp-for="NewRegistration.Devices[0]">@d.Name</label>
<input asp-for="NewRegistration.Devices[0]" class="checkbox" type="checkbox" />
}
<div>
<label asp-for="NewRegistration.OrganizationId">Organization:</label>
<select asp-for="NewRegistration.OrganizationId" asp-items="@Model.getOrganizations()" class="form-control"></select><br />
<span asp-validation-for="NewRegistration.OrganizationId" class="text-danger"></span>
</div>
<div>
<label asp-for="NewRegistration.ClosingParty">Are you coming to the closing party?</label>
<input asp-for="NewRegistration.ClosingParty" />
<span asp-validation-for="NewRegistration.ClosingParty" class="text-danger"></span>
</div>
<input type="submit" class="btn btn-default" value="Register" />
</form>
[MVC 6タグヘルパーとforeach]の可能な複製(http://stackoverflow.com/questions/31903972/mvc-6-tag-helpers-and-foreach) –
'@foreach(Data.GetDevicesのデバイスd) ()) 'あなたは、データが移入されたモデルをプッシュするのではなく、カミソリ内からコードを実行していますか? –
のasp-for = "@ d.NameOfBooleanProperty"のようなものではないはずですか? –