为什么我不能在div内容中放置DropDownListFor?

时间:2014-03-24 20:48:20

标签: javascript jquery asp.net-mvc html.dropdownlistfor

我有两个DropDownListFor,第二个的内容取决于第一个。

每次在第一次使用javascript进行不同的选择时,我都会尝试刷新div内容(列表):

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

div就是:

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

ViewModel中的SelectList取决于第一个列表中的选定项目:

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

不幸的是,运行此结果会导致:

Microsoft JScript运行时错误:由于错误80020101无法完成操作。

但是,我尝试过使用:

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

用于onUpdate()函数并且工作正常,因此问题似乎与DropDownListFor有关。

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

1 个答案:

答案 0 :(得分:0)

我不确定错误,afaik是关于Internet Explorer和解析错误的东西,但是。

下拉列表标记实际上只在响应时生成一次,因此该字符串将是常量。

<%= Html.DropDownListFor(model => model.PeriodSelected, Model.PeriodSelectList) %>始终是<select>...</select>

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

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

  

有WebForms。