2013-04-25 10 views
5

Poniżej znajduje się Widok:Jak uzyskać wybrany rozwijanej wartości od kontrolera MVC

<div class="editor-label"> 
     Select Currency : 
     </div> 
     <div class="editor-field"> 
      @Html.DropDownList("CurrencyId", new SelectList(ViewBag.CurrencyId, "Value", "Text")) 
</div><div class="editor-label"> 
     Select GameType : 
     </div> 
     <div class="editor-field"> 
      @Html.DropDownList("GameTypeId", new SelectList(ViewBag.GameTypeId, "Value", "Text"), new { style = "width:100px" }) 
      @Html.ValidationMessageFor(model => model.GameTypeId) 
     </div> 

     <div class="editor-label"> 
      Select Category : 
     </div> 
     <div class="editor-field"> 
      @Html.DropDownList("CategoryByGameType", Enumerable.Empty<SelectListItem>(), "Select Category") 
      @Html.ValidationMessageFor(model => model.CategoryId) 
     </div> 

Poniżej Kontroler: -

public ActionResult Create() 
     { 
      List<Currency> objCurrency = new List<Currency>(); 
      objCurrency = db.Currencies.ToList(); 
      List<SelectListItem> listItems = new List<SelectListItem>(); 
      listItems.Add(new SelectListItem() 
      { 
       Value = "0", 
       Text = "Select Currency" 
      }); 
      foreach (Currency item_Currency in objCurrency) 
      { 
       listItems.Add(new SelectListItem() 
       { 
        Value = item_Currency.CurrencyId.ToString(), 
        Text = item_Currency.CurrencyName 
       }); 
      } 
      ViewBag.CurrencyId = new SelectList(listItems, "Value", "Text"); 

      List<GameType> objgametype = objGameByGameType.GetDistinctGameTypeID(); 
      List<SelectListItem> listItems_1 = new List<SelectListItem>(); 
      listItems_1.Add(new SelectListItem() 
      { 
       Value = "0", 
       Text = "Select Game Type" 
      }); 
      foreach (GameType item_GameType in objgametype) 
      { 
       listItems_1.Add(new SelectListItem() 
       { 
        Value = item_GameType.GameTypeId.ToString(), 
        Text = item_GameType.GameTypeName 
       }); 
      } 
      ViewBag.GameTypeId = new SelectList(listItems_1, "Value", "Text"); 


      return View(); 
     } 

Poniżej jest mój jQuery dla używam Casceding rozwijanej

$(function() { 
      $("#GameTypeId").change(function() { 
       var theatres = ""; 
       var gametype = ""; 
       var mytestvar = ""; 
       var gametypeid = $(this).val(); 

      mytestvar += "<option value= -1 >Select Category</option>"; 
      $.getJSON("@Url.Action("GetCategoryByGameType", "GameCombination")?gametypeid=" + gametypeid, function (data) { 
       $.each(data, function (index, gametype) { 
        // alert("<option value='" + gametype.Value + "'>" + gametype.Text + "</option>"); 
        mytestvar += "<option value='" + gametype.Value + "'>" + gametype.Text + "</option>"; 
       }); 
       //alert(mytestvar); 
       $("#CategoryByGameType").html(mytestvar); 
       $("#GamebyCategory").html("<option value=0>Select Game</option>"); 
       $("#LimitVariantByGameByGameType").html("<option value=0>Select Limit Variant</option>"); 
       $("#StakeCategory").html("<option value=0>Select Stake Category</option>"); 
       $("#StakeBuyInByStakeCategory").html("<option value=0>Select Stake Buy In By Stake Category</option>"); 
     }); 

    }); 
    }); 

Podczas przesyłania danych nie mogę odzyskać wartości rozwijanej, jeśli wystąpi błąd e-mail:

+2

Ok, moja pierwsza uwaga: ponieważ oddzieliłeś widok i kod javascript, podejrzewam, że JS jest w oddzielnym pliku. W tym przypadku to nie działa: '(" @ Url.Action "(" GetCategoryByGameType "," GameCombination ")' Nie można używać metod pomocnika MVC w pliku JS, należy jawnie określić adres URL. –

Odpowiedz

0

Echo tego, co powiedział Andras, nie można używać składni brzytwy w pliku .js, jeśli tak się dzieje.

Powinieneś również zapoznać się z narzędziami do debugowania, z jakiej przeglądarki korzystasz? Większość ma ładny zestaw narzędzi programistycznych (niektóre mają je wbudowane), gdzie można sprawdzić stronę i żądanie wysłane po przesłaniu formularza.

Można interaktywnie używać jquery w konsoli przeglądarki, aby również się rozejrzeć.

Nie wyświetlasz swojej metody tworzenia postów, być może jest ona związana z tym kodem?

0

To powinno dać ci wyobrażenie o tym, co możesz zrobić.

Proponuję przenieść ajax do własnej funkcji i $.each do swojej własnej funkcji i wywołać funkcję $.each z funkcji ajax i funkcji ajax z głównej funkcji.

$(function() { 
    $("#GameTypeId").change(function() { 
     var theatres = ""; 
     var gametype = ""; 
     var mytestvar = ""; 
     var gametypeid = $(this).val(); 

     mytestvar += "<option value= -1 >Select Category</option>"; 

     $.ajax({ 
      url: '/GameCombination/GetCategoryByGameType', 
      type: 'GET', 
      data: { "gametypeid": gametypeid}, 
      dataType: 'json', 
      success: function (data) { 
       $.each(data, function (index, gametype) { 
        // alert("<option value='" + gametype.Value + "'>" + gametype.Text + "</option>"); 
        mytestvar += "<option value='" + gametype.Value + "'>" + gametype.Text + "</option>"; 
       }); 
       //alert(mytestvar); 
       $("#CategoryByGameType").html(mytestvar); 
       $("#GamebyCategory").html("<option value=0>Select Game</option>"); 
       $("#LimitVariantByGameByGameType").html("<option value=0>Select Limit Variant</option>"); 
       $("#StakeCategory").html("<option value=0>Select Stake Category</option>"); 
       $("#StakeBuyInByStakeCategory").html("<option value=0>Select Stake Buy In By Stake Category</option>"); 
      }, 
      error: function (error) { 
       alert(error.toString()); 
      } 
     }); 

    }); 
}); 
0

Trzeba utworzyć obiekt za dropdownlist w View.cs a następnie przypisać wartość. Następnie, gdy spróbujesz uzyskać wartości dropdown musisz użyć nazwy obiektu tytułowego ViewBag, a następnie wartości listy rozwijanej.

Poniższy kod określa radiobutton. Można zmienić ją na liście rozwijanej

@model MVC_Compiler.Models.UserProgram 
@{ 
ViewBag.Title = "UserProgram"; 
} 
<table style="background-color: #FBF9EF;"> 
      <colgroup> 
       <col style="width: 20%;"> 
       <col style="width: 80%;"> 
      </colgroup> 
      <tr> 
       <td style="vertical-align: text-top"> 
        @Html.RadioButtonFor(up => up.Language, "C")C<br /> 
        @Html.RadioButtonFor(up => up.Language, "C++")C++<br /> 
        @Html.RadioButtonFor(up => up.Language, "C#")C#<br /> 
        @Html.RadioButtonFor(up => up.Language, "VB")VB<br /> 
        @Html.RadioButtonFor(up => up.Language, "Java")Java<br /> 
        @Html.RadioButtonFor(up => up.Language, "Perl")Perl<br /> 
        @Html.HiddenFor(up => up.Language, new { @id = "Select_Language" }) 
        @Html.HiddenFor(up => up.UserName, new { @id = "UserName" }) 
       </td> 

Następnie w modelach można uzyskać wartość przycisku radiowego przez następujący sposób:

userProgram.Language 

gdzie userProgram jest ViewBag Tytuł.

Powiązane problemy