2015-09-03 41 views
0

我正在使用EnumDropDownList,但無論選擇哪個選項,只有第一個可選選項(「0」是因爲枚舉值從1開始)作爲輸入值返回。我錯過了什麼?在.Net MVC中使用EnumDropDownListFor時,無論選擇哪個選項標記,只返回第一個可選選項

枚舉類:

public enum vehicleStatus 
{ 
    Status1 = 1, 
    Status2, 
    Status3 
} 

模型剃刀頁:

@model VehicleSearchFormViewModel 

代碼形式:

@using (Html.BeginForm("Search", "Vehicles", FormMethod.Post)) 

代碼爲EnumDropDownList:

<div class="input-field"> 
@Html.EnumDropDownListFor(model => model.SearchParameters.vehicleStatus) 
</div>  

控制器中的搜索方法。舉例來說,我在dropDownList中選擇「Status2」。如果在調試期間到達方法時放置了斷點,則carDetails對象中的vehicleStatus值仍爲「0」。

[HttpPost] 
    public ActionResult Search(VehicleSearchFormViewModel carDetails) 
    { 

     IEnumerable<Vehicles> searchResults =_db.SearchResults(carDetails); 

     carDetails.SearchResults = searchResults; 

     return View(carDetails); 
    } 

我的視圖模型:

using System.Collections.Generic; 
using System.Web.Mvc; 
using TRAP.Models; 
using System.ComponentModel.DataAnnotations; 

namespace TRAP.ViewModels 
{ 
public class VehicleSearchFormViewModel 
{ 
    private TrapDb db = new TrapDb(); 

    public IEnumerable<SelectListItem> vehicleHolder { get; set; } 

    public IEnumerable<SelectListItem> CategoryOptions { get; set; } 

    public IEnumerable<SelectListItem> SubCategoryOptions { get; set; } 

    public VehicleSearch SearchParameters { get; set; } 

    public IEnumerable<Vehicles> SearchResults { get; set; } 
} 
} 

VehicleSearch類(searchParameters):

using TRAP.Models; 
namespace TRAP.ViewModels 
{ 
public class VehicleSearch 
{ 
    public int? vehicleId { get; set; } 

    public int? diarieNumber { get; set; } 

    public string vehicleHolder { get; set; } 

    public string Category { get; set; } 

    public string subCategory { get; set; } 

    public string registeredDateStart { get; set; } 

    public string registeredDateEnd { get; set; } 

    public bool? deregistration { get; set; } 

    public vehicleStatus vehicleStatus { get; set; } 
} 
} 

當在Web瀏覽器檢查的下拉菜單:

<select id=」SearchParameters_vehicleStatus」 name=」Searchparameters.vehicleStatus」 data-val-required=」The vehicleStatus field is required.」 data-val=」true」> 
<option value="0" selected="selected"></option> 
<option value="1">Status1</option> 
<option value="2">Status2</option> 
<option value="3">Status3</option> 
</select> 

我的索引GET

public ActionResult Index() 
     { 
      var viewModel = new VehicleSearchFormViewModel() 
      { 
       SearchParameters = new VehicleSearch() 
      }; 

      using (var db = new TrapDb()) 
      { 
       var allOptionsList = new List<SelectListItem> { new SelectListItem { Text = "", Value = "" } }; 
       var vehicleHolder = 
        allOptionsList.Union(
         db.Vehicles 
          .Select(
           x => new SelectListItem { Value = x.vehicleHolder, Text = x.vehicleHolder })) 
          .ToList(); 

       var categoryOptions = allOptionsList.Union(db.Vehicles.Select(x => x.Category).Distinct().Select(m => new SelectListItem() { Value = m, Text = m })).ToList(); //distinct/unique 

       var subCategoryOptions = allOptionsList.Union(db.Vehicles.Select(m => new SelectListItem() { Value = m.subCategory, Text = m.subCategory }).Distinct()).ToList(); 

       viewModel.vehicleHolder = vehicleHolder; 
       viewModel.SubCategoryOptions = subCategoryOptions; 
       viewModel.CategoryOptions = categoryOptions; 
      } 

      return View(viewModel); 
     } 

完全視圖

@using TRAP.ViewModels 
@model VehicleSearchFormViewModel 

@{ 
    ViewBag.Title = "Index"; 
} 

@section scripts{ 

    <script type="text/javascript"> 
     $(document).ready(function() { 
      $(".datefieldFrom").datepicker(); 
     }); 
     $(document).ready(function() { 
      $(".datefieldTo").datepicker(); 
     }); 
    </script> 
} 

<nav class="left-nav"> 
    <ul> 
     <li>Systemkonfigurerare</li> 
     <li><img class="navIcon" src="~/Content/images/arrow.png">@Html.ActionLink("Tillbaka till startsida", "Index", "Home")</li> 
     <li><img class="navIcon" src="~/Content/images/addDocument.png">Ansöka om ny fordonstyp</li> 
     <li><img class="navIcon" src="~/Content/images/addDocument.png">Registrera ny fordonstyp</li> 
     <li><img class="navIcon" src="~/Content/images/addDocument.png">Registrera ny sammansatt fordonstyp</li> 
     <li><img class="navIcon" src="~/Content/images/addDocument.png">Registrera ny fordonsindivid</li> 
     <li><img class="navIcon" src="~/Content/images/calender.png"> Fordonstyper med avvikelser </li> 
     <li><img class="navIcon" src="~/Content/images/calender.png">Antal godkännanden </li> 
     <li><img class="navIcon" src="~/Content/images/calender.png">Sök utgångna godkännanden </li> 
     <li><img class="navIcon" src="~/Content/images/calender.png">Statistik fordonstyper </li> 
     <li><img class="navIcon" src="~/Content/images/coins.png">Årlig avgift</li> 
     <li><img class="navIcon" src="~/Content/images/coins.png">Årlig avgift(detalj)</li> 
     <li><img class="navIcon" src="~/Content/images/key.png">Systemkonfiguration</li> 
    </ul> 
</nav> 

<div class="vehicle-page-upper-body"> 
    <div class="body-title-div"> 
     <h3 class="body-title">Sök fordonsindivid</h3> 
    </div> 
    @using (Html.BeginForm("Search", "Vehicles", FormMethod.Post)) 
    { 
    <div id="left-search-div-container"> 

     <div class="search-field-div"> 
      <label class="input-label"> 
       @Html.DisplayNameFor(model => model.SearchParameters.vehicleId) 
      </label> 
      <div class="input-field"> 
       @Html.TextBoxFor(x => x.SearchParameters.vehicleId) 
      </div> 
     </div> 

     <div class="search-field-div"> 
      <label class="input-label"> 
       @Html.DisplayNameFor(model => model.SearchParameters.diarieNumber) 
      </label> 
      <div class="input-field"> 
       @Html.TextBoxFor(x => x.SearchParameters.diarieNumber) 
      </div> 
     </div> 

     <div class="search-field-div"> 
      <label class="input-label"> 
       @Html.DisplayNameFor(model => model.vehicleHolder) 
      </label> 
      <div class="input-field"> 
       @Html.DropDownList("carDetails.SearchParameters.vehicleHolder", Model.vehicleHolder) 
      </div> 
     </div> 
     <br /> 

      <div class="search-field-div"> 
       <label class="input-label"> 
        @Html.DisplayNameFor(model => model.SearchParameters.Category) 
       </label> 
       <div class="input-field"> 
        @Html.DropDownList("carDetails.SearchParameters.category", Model.CategoryOptions) 
       /
        @Html.DropDownList("carDetails.SearchParameters.subCategory", Model.SubCategoryOptions) 
       </div> 
      </div> <br /> 

     <div class="search-field-div"> 
      <label class="input-label"> 
       @Html.DisplayNameFor(model => model.SearchParameters.registeredDateStart) 

      </label> 
      <div class="input-field"> 
       <input type="text" name="carDetails.SearchParameters.registeredDateStart" class="datefieldFrom" /> <img class="calenderIcon" src="~/Content/images/calender.png" /> - 
       <input type="text" name="carDetails.SearchParameters.registeredDateEnd" class="datefieldTo" /> <img class="calenderIcon" src="~/Content/images/calender.png" /> 
      </div> 
     </div> 

      <div class="search-field-div"> 
       <label class="input-label"> 
        @Html.DisplayNameFor(model => model.SearchParameters.deregistration) 
        @Html.CheckBox("carDetails.SearchParameters.deregistration", Model.SearchParameters.deregistration) 

       </label> 

      </div><br /><br /> 

      <div class="search-field-div"> 
       <label class="input-label"> 
        @Html.DisplayNameFor(model => model.SearchParameters.vehicleStatus) 
       </label> 
       <div class="input-field"> 
        @Html.EnumDropDownListFor(model => model.SearchParameters.vehicleStatus) 

       </div> 
      </div> 

     <div id="search-buttons"> 
      <input type="submit" value="Sök" /> 
      <input type="reset" value="Rensa" /> 
     </div> 

    </div> 

    <div id="right-search-div-container"> 

    </div> 
    } 

</div> 

<div class="vehicle-page-middle-body"> 
    <div class="body-titel-div"> 
     <h3 class="body-title">Sök fordonstyp</h3> 
     <p id="underProgressText"><i>Kommer snart..</i></p> 
    </div> 

</div> 

<div class="vehicle-page-lower-body"> 
    <div id="lower-body-checkbox"> 
     @Html.CheckBox("keepSearchResult") 
     @Html.DisplayName("Behåll sökresultat") 
    </div> 

    <div class="body-titel-div"> 
     <h4 class="lower-body-titles">Om fordonsregistret</h4> 
    </div> 

    <p class="lower-body-text">Transportstyrelsens register över järnvägsfordon är ett IT-verktyg som används för att registrera fordonstyper och godkända fordonsindivider.</p> 
    <p class="lower-body-text">Registret ska vara tillgängligt för de anställda men till viss del även för extrema användare. Verksamhetsutövare kan ansöka om ett användarkonto, och få tillgång till valda delar av registret. Det är till exempel möjligt att få en förteckning på sina egna registrerade fordon och att påbörja en ansökan om godkännande av ny fordonstyp.</p> 
    <p class="lower-body-text">Allmänheten ser, baserat på fordonsnummer, viss utvald data från registret via Transportstyrelsens webbplats. Registret innehåller uppgifter om de viktigaste egenskaperna hos fordonen både på fordonstyp- och fordonsindividnivå</p> 

    <div class="body-titel-div"> 
     <h4 class="lower-body-titles">Användarmanual</h4> 
    </div> 
    <p class="lower-body-text"> 
     Överst till höger finns en användarmanual Ladda ner manual. Här finns tips om hur ni använder de olika funktionerna i registret. 

    </p> 


</div> 
<hr id="bottom-hr"> 
+0

奇怪的是,我將你的代碼複製並粘貼到一個新項目中,它的工作原理與它應該一樣。發佈你的索引GET action – JB06

+0

你在MVC5.1 +中使用'EnumDropDownListFor()'方法嗎? (我不能重現你的問題) –

+0

@ JB06 我現在已經添加了我的索引GET – MazW

回答

0

與EnumDropDownListFor的問題是不能正常工作,因爲在您的視圖模型中的屬性和SearchParameter類具有相同的名稱,vehicleHolder模型綁定的副作用。

將視圖模型屬性的名稱更改爲vehicleHolderOptions,並在您的視圖中使用@ Html.DropDownListFor而不是@ Html.DropDownList。

相關問題