2016-11-10 1 views
0

Dears zurückgegeben,C# - Liste der Kontrollkästchen machen, immer als aufgegebene

Bitte könnten Sie mit folgendem Problem helfen:

Ich möchte in meiner Ansicht Liste des Kontrollkästchen machen.

      @model IEnumerable<CFts.Models.CFModel> 
          ... 
          @foreach (var test in ViewBag.CF_list) 
          { 

           if (test.Text != "" && test.Text != " ") 
           { 
            <div class="checkbox"> 
             <label><input value="@test.Value" id="CF_list_" name="CF_list_" @(test.Selected == true ? "checked" : "") type="checkbox"> @test.Text</label> 
            </div> 
           } 
          } 

OK, Kontrollkästchen auf der Seite.

CF_list in Regler (SelectListItem) erzeugt

Aber Problem, dass - wenn dieses Formular senden, mindestens eine der Kontrollkästchen alle so ausgewählt markiert Zeit. Zum Beispiel: 1. Ich wählte zwei chekckboxed, send Formular - alles ist in Ordnung. 2. Ich entferne alle Häkchen und sende das Formular - eines der Kontrollkästchen (zuletzt angeklickt), das als ausgewählt angezeigt wird.

Warum?

CF_List ist SelectListItem

Eine weitere Frage:

Bitte könnten Sie mir helfen, zu verstehen, sehr einfache Sache

Ich habe Modell mit meiner Klasse:

public class VendorAssistanceViewModel 
{ 
    public string Name { get; set; } 
    public bool Checked { get; set; } 
} 
public partial class CSModel : IEntity 
{ 
    public CSModel() 
    { 

     VendorAssistances = new[] 
     { 
     new VendorAssistanceViewModel { Name = "DJ/BAND" }, 
     new VendorAssistanceViewModel { Name = "Officiant" }, 
     new VendorAssistanceViewModel { Name = "Florist" }, 
     new VendorAssistanceViewModel { Name = "Photographer" }, 
     new VendorAssistanceViewModel { Name = "Videographer" }, 
     new VendorAssistanceViewModel { Name = "Transportation" }, 
     }.ToList(); 
    } 


    public IList VendorAssistances { get; set; } 

Ich habe Ansicht:

@model IEnumerable<CSTS.Models.CSModel> 

    ... some html code... 
and how here to show array of checkboxes from Model, using VendorAssistances ? 

Ich weiß, dass dies sehr einfach ist, ich lese viele Dokumente, kann aber immer noch nicht verstehen

Vielen Dank!

Antwort

0

Setzen Sie das checked-Attribut nicht, lassen Sie das value-Attribut bestimmen, ob es markiert ist oder nicht.

ändern

<label><input value="@test.Value" id="CF_list_" name="CF_list_" @(test.Selected == true ? "checked" : "") type="checkbox">@test.Text</label> 

Um
<label><input value="@test.Value" id="c_" name="CF_list_" type="checkbox">@test.Text</label> 

UPDATE: Nur um dies zu erleichtern ..

zu verstehen kein SelectListItem für CF_List Verwenden Sie diese stattdessen verwenden. SelectListItem wird für Dropdown-Listen verwendet.

public class CFListCheckbox 
{ 
    public bool IsChecked { get; set; } // Add a property to know if the checkbox should be checked or not 
    public string Text { get; set; } 
    public object Value { get; set; } // Change as needed 
} 

In Ihrem GET Aktion ..

// Assign an ICollection<CFListCheckbox> to your ViewBag.CF_list 
ICollection<CFListCheckbox> cfListCB = cfCollection.Select(r => new CFListCheckbox() 
{ 
    IsChecked = false, 
    Text = r.SomeProp, 
    Value = r.SomePropOrWhatever 
}).ToList(); 
ViewBag.CF_list = cfListCB; 

Auf Ihrer Ansicht verwenden Sie die Html.Checkbox Ihre Kontrollkästchen zu erstellen.

@foreach (var test in ViewBag.CF_list) 
{  
    if (!string.IsNullOrWhiteSpace(test.Text)) 
    { 
     <div class="checkbox"> 
      <label> 
       @Html.Checkbox("CF_list_", test.IsChecked, new { Value = test.Value }) @test.Text 
      </label> 
     </div> 
    } 
} 

Auf Ihrer POST Aktion, setzen Sie einfach die ViewBag.ViewBag.CF_list falls Ihr Beitrag versagt und auf die Ansicht zurückgeht.

Bitte beachten Sie, dass der Beispielcode nur eine Vorstellung davon gibt, was Sie tun können. Es ist nicht absolut. Optimiere es nach Bedarf.

+0

Vielen Dank für Ihre Antwort. Aber, wenn ich @ (test.Selected == true? "Checked": "" wie auf der Seite (nach Postback) zu zeigen, dass Kontrollkästchen aktiviert ist? – Fullbalanced

+0

Wenn Sie mit asp.net MVC nur das gepostete Modell zurückgeben zur Ansicht. 'return View (Modell)'. Aber da Sie eine Viewbag verwenden, legen Sie einfach die 'ViewBag.CF_list = model.CF_list_' oder einfach, wie Sie es auf Ihre GET-Aktion setzen. –

+0

Ja, es wird zurückgegeben in Ausgewähltes Attribut, aber dieses Attribut ist immer wahr beim zuletzt angeklickten Kontrollkästchen – Fullbalanced

Verwandte Themen