2017-08-10 14 views
0

私は2つの項目を持つDropDownListを持っています。私が2番目のものを選択すると、それが点滅し、すぐに最初のものに戻ります。DropDownListは常に最初の要素を表示します

@Html.DropDownListFor(m => m.SelectedProduct, new SelectList(Model.Products, "ProductCode", "ProductName",Model.SelectedProduct),new { @class = "form-control" }) 

マイコンコード。

public ActionResult Index(int id, string productName) 
    { 
     var model = new ProductModel 
     { 
      Product = ProductService.GetProducts() 
     }; 

     var view = "Something"; 
     model.SelectedProduct = productName; 
     if(productName =="another") 
      view = "another"; 
     return View(view, model); 
    } 

Model.Productsのタイプは​​です。

public class Product 
{ 
    public string ProductName {get;set;} 
    public string ProductCode {get;set;} 
} 

私はこのlinkを見ましたが、私は私のコントローラでViewDataを持っていません。だから私を助けてください。

私のクライアント側のコード:

$(document).ready(function() { 
     $("#SelectedProduct").change(function() { 
      var selectedValue = $(this).find('option:selected').text(); 

      window.location.href = "@(Url.RouteUrl("MyRoute", new { id = Model.id }))/" + encodeURI(selectedValue); 
    }); 
+0

これはASP.NETの問題で、JavaScriptの問題ではありませんか?値を変更した後にページがリロードされるか、またはすべてがクライアント側で行われますか?これが発生した場合、クライアントにはサーバの通信がありますか?<-> – ChrFin

+0

クライアントサイドコードを追加しました。私は 'selectedValue'が正しいと確信しています。 – Bigeyes

+0

あなたのリダイレクトはjsで奇妙に見えます。このリクエストが上記のアクションにルーティングされ、「productName」が期待どおりに入力されていることを確認してください。あなたのルート設定を表示できますか? – Andrei

答えて

1

問題が

new SelectList(Model.Products, "ProductCode", "ProductName", Model.SelectedProduct)に渡され、選択した項目(第四パラメータ)です。

これは、Model.SelectedProductが、SelectListの項目のValueを保持することを前提としています。

あなたのJSコードは、Nameであるvar selectedValue = $(this).find('option:selected').text();を渡します。

これを var selectedValue = $(this).find('option:selected').val();に変更して、ProductCodeに渡します。

+0

'SelectList'コンストラクタの4番目のパラメータは' Using 'DropDownListFor()'を使用してモデルプロパティにバインドするときに無視され、削除するだけです(無意味です)。そして、それはちょうど 'var selectedValue = $(this).val();' –

関連する問題