2015-09-03 101 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。

相关问题