2014-03-24 40 views
0

我有两个DropDownListFor的,第二个的内容取决于第一个。为什么我不能把一个DropDownListFor在div内容?

我试图刷新DIV内容(列表)每一个不同的选择,在首次提出用JavaScript代码的时间:

function onUpdate() { 
    $("#MyDiv").html('<%= Html.DropDownListFor(model => model.PeriodSelected, Model.PeriodSelectList) %>'); 
} 

而且DIV很简单:

<div id="MyDiv" class="editor-field" /> 

选择列表的在视图模型依赖于从第一个列表中所选项目:

public SelectList PeriodSelectList 
    { 
     get 
     { 
      var list = this.Versions.ToList().Where(fv => fv.DateSubmitted.Year == PeriodSelected); 
      return new SelectList(list, "Id", "Version"); 
     } 
    } 

可惜运行这会导致:

微软JScript运行时错误:

$("#MyDiv").html('<%= Html.LabelFor(...) %>'); 

为的onUpdate:无法完成,由于操作错误80020101.

不过,我已经尝试使用()函数和工作正常,所以问题似乎与DropDownListFor。

那么,为什么这不起作用?谢谢

回答

0

我不知道错误,afaik它是关于Internet Explorer和解析错误,但。

下拉列表标记实际上只对响应生成一次,所以这个字符串将是常量。

<%= Html.DropDownListFor(model => model.PeriodSelected, Model.PeriodSelectList) %>将一直<select>...</select>一直。

您需要重新考虑您的网站的工作流程以预先加载所有需要的信息,然后仅使用JavaScript进行工作。因此,您需要使用javascript在浏览器中过滤期间,并将asp.net mvc仅作为数据源。

或者以某种方式使用ajax重新生成服务器上的下拉列表标记。简而言之,在ASP.NET MVC中,您无法轻松混合使用JavaScript和.NET代码。我认为,这是正确的做法。但是,如果你想这么做是出于某种原因:

there're WebForms.

+0

谢谢!我的SelectList现在被设置在控制器中(而不是VM),并且我通过ajax post进行刷新。 – Chris

相关问题