2017-08-10 108 views
0

我有DropDownList有两个项目。当我选择第二个时,它会闪烁,然后立即返回第一个。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在选择列表中保存一个项目的Value

但是你的JS代码通过var selectedValue = $(this).find('option:selected').text();这是Name

将此更改为 var selectedValue = $(this).find('option:selected').val();以传递产品代码。

+0

当使用'DropDownListFor()'绑定到model属性时,'SelectList'构造函数的第四个参数被忽略并且应该被删除(无意义)。并注意它可以是'var selectedValue = $(this).val();' –

相关问题