2013-03-18 12 views
20

Obecnie mam scaffolded widok, w którym wartość logiczną własnością mojego modelu zostanie przekazany do pomocnika Html.EditorFor:Konwersja logiczną edytora własności do dropdownlist w widoku MVC

@Html.EditorFor(model => model.EndCurrentDeal) 

Wszystko dobrze, ale co Naprawdę zamierzam zrobić to masując to na liście rozwijanej:

<select> 
    <option value="true" selected="selected">Yes</option> 
    <option value="false">No</option> 
</select> 

Jaki jest najłatwiejszy sposób na osiągnięcie tego?

Dzięki,

Chris

+1

zobaczyć tę odpowiedź http: // stackoverflow.com/a/9885229/138071 –

Odpowiedz

20

Można spróbować coś here:

<%= Html.DropDownList(
    "", 
    new SelectList(
     new[] 
     { 
      new { Value = "true", Text = "Yes" }, 
      new { Value = "false", Text = "No" }, 
     }, 
     "Value", 
     "Text", 
     Model 
    ) 
) %> 

Jeśli chcesz Wartość domyślna:

<%= Html.DropDownList(
     "", 
     new SelectList(
      new[] 
      { 
       new { Value = "", Text = "None" }, 
       new { Value = "true", Text = "Yes" }, 
       new { Value = "false", Text = "No" }, 
      }, 
      "Value", 
      "Text", 
      Model 
     ) 
    ) %> 
+0

Co jeśli wartość 'bool' jest zerowa? Jak utworzyć opcję zerową? –

+0

Widzę aktualizację dziękuję. Czy mogę również zrobić "value =" null "? –

19

MVC 4

@*/////////////////// bool ////////////////////////////////*@ 
@model bool 

@Html.DropDownListFor(m => m, new SelectList(
     new[] 
     { 
      new { Value = "true", Text = "Yes" }, 
      new { Value = "false", Text = "No" }, 
     }, 
     "Value", 
     "Text", 
     Model 
    )) 

@*/////////////////// bool? ////////////////////////////////*@  
@model bool? 

@Html.DropDownListFor(m => m, new SelectList(
     new[] 
     { 
      new { Value = "", Text = "(none)" }, 
      new { Value = "true", Text = "Yes" }, 
      new { Value = "false", Text = "No" }, 
     }, 
     "Value", 
     "Text", 
     Model 
    )) 
7

Możesz także wypróbować podejście słownikowe jest nieco czystsze i można je łatwo dodać do konstruktora dla modelu widoku.

ViewModel

//Define IDictionary interface 
public IDictionary<bool, string> options { get; set; } 

public YourViewModel() 
{ 
    // Default constructor 
     this.options = new Dictionary<bool, string>(); 
     this.options.Add(false, "no"); 
     this.options.Add(true, "yes"); 
} 




@Html.DropDownListFor(model => model.yourPropertyToEdit, new SelectList(Model.options, "Key", "Value")) 
4

mam inspirowane z bardzo użyteczną odpowiedź od Francois Borgies, więc postanowiłem napisać niestandardową metodę, która tworzy SelectList dla Boolean wartości, które mogą być wykorzystane w @Html .DropDownList. Gdy masz metodę pomocniczą, którą można zastosować w każdym widoku, zmniejsza ona ilość kodu potrzebnego w widokach maszynki.

Mój projekt ma CustomHelpers.cs klasy w folderze: App_Code/Pomocnicy

namespace YourProjectName.App_Code.Helpers 
{ 
    public static class CustomHelpers 
    { 
     public static SelectList SelectListForBoolean(object selectedValue = null) 
     { 
      SelectListItem[] selectListItems = new SelectListItem[2]; 

      var itemTrue = new SelectListItem(); 
      itemTrue.Value = "true"; 
      itemTrue.Text = "Yes"; 
      selectListItems[0] = itemTrue; 

      var itemFalse = new SelectListItem(); 
      itemFalse.Value = "false"; 
      itemFalse.Text = "No"; 
      selectListItems[1] = itemFalse; 

      var selectList = new SelectList(selectListItems, "Value","Text", selectedValue); 

      return selectList; 
     }   
    } 
} 

W widoku tworzyć można go używać w następujący sposób:

@model Foo 
@using YourProjectName.App_Code.Helpers; 
... 
@Html.DropDownList("EndCurrentDeal", CustomHelpers.SelectListForBoolean(), "-select-") 

dla edytuj zobacz

@model Bar 
@using YourProjectName.App_Code.Helpers; 
... 
@Html.DropDownList("EndCurrentDeal", CustomHelpers.SelectListForBoolean(Model.EndCurrentDeal), "-select-") 

Chociaż moja metoda pomocnika nie jest czysty HTML Helper ponieważ tworzy SelectList, - to jednak następuje samą funkcjonalność, która została przedstawiona przez Rahula Rajat Singh, w swoim znakomitym artykule An Absolute Beginner's Tutorial on HTML Helpers and Creating Custom HTML Helpers in ASP.NET MVC

Powiązane problemy