我有两个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有关。
那为什么这不起作用?感谢
答案 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。