我正在使用来自MVC Extensions的Telerik网格控件。我已将其设置为使用控制器上的操作方法通过AJAX调用执行选择,插入,更新和删除。我在每行中都有一个编辑命令按钮,显示一个弹出窗体,用于编辑或创建网格中显示的实体。我还在EditorTemplates中为对象类型定义了一个模板。这一切都按预期运作。当我尝试在行中添加删除命令按钮时出现问题。它导致了这个例外:
模板只能用于字段访问,属性访问,单维数组索引或单参数自定义索引器表达式。
我已经确认这与我使用编辑/删除正常工作的编辑器模板无关。我没有看到删除命令和编辑器模板如何相互冲突。这是Telerik的错误吗?我已经尝试过他们的论坛而没有任何回复。
以下是代码:
this.Html.Telerik().Grid(this.Model.RuleSet.ValueRules)
.Name("ValueRuleGrid")
.DataKeys(keys => { keys.Add<Int64>(r => r.ID); })
.DataBinding(binding => {
binding.Ajax()
.Select(this.Model.AjaxSelectMethod)
.Insert(this.Model.AjaxInsertMethod)
.Update(this.Model.AjaxUpdateMethod)
.Delete(this.Model.AjaxDeleteMethod)
;
})
.Columns(columns => {
columns.Bound(r => r.Section.Name).Title("Section");
columns.Bound(r => r.ItemName).Title("Question Code");
columns.Bound(r => r.Expression);
columns.Bound(r => r.Result);
columns.Command(commands => {
commands.Edit();
// FIX: When this is not commented out
// the page can't be loaded and results in an exception
//commands.Delete();
}).Width(200);
})
.ToolBar(toolbar => {
toolbar.Insert().ButtonType(GridButtonType.ImageAndText);
})
.Pageable(paging => {
paging.PageSize(6);
})
.Editable(editor => {
editor.Mode(GridEditMode.PopUp);
})
.Filterable()
.Sortable(sorting => {
sorting.Enabled(true);
sorting.SortMode(GridSortMode.MultipleColumn);
sorting.OrderBy(t => t.Add(vr => vr.SectionName));
sorting.OrderBy(t => t.Add(vr => vr.ItemName));
sorting.OrderBy(t => t.Add(vr => vr.Result));
})
.Render();
这是编辑器模板:
<script type = "text/javascript">
function onChange_SectionName(e) {
var sectionName = $("#SectionName").data("tAutoComplete").value();
var itemName = $('#ItemName').data('tAutoComplete');
itemName.value("");
if (sectionName.length > 0) {
itemName.ajax.selectUrl =
'<%:
this.Url.Action("GetSectionItemNames", "Scoring")
%>?sectionName=' + sectionName;
$('#ItemName').attr("disabled", "");
}
else {
$('#ItemName').attr("disabled", "disabled");
}
}
</script>
<table>
<tr>
<td>Section:</td>
<td><%: this.Html.HiddenFor(vr => vr.ID) %>
<% this.Html.Telerik().AutoComplete()
.Name("SectionName")
.DataBinding(binding => {
binding.Ajax()
.Cache(true)
.Select("GetSectionNames", "Scoring");
})
.ClientEvents(events => {
events.OnChange("onChange_SectionName");
})
.Filterable(filtering => {
filtering.FilterMode(AutoCompleteFilterMode.Contains);
filtering.MinimumChars(1);
})
.AutoFill(true)
.Multiple(m => m.Enabled(false))
.HighlightFirstMatch(true)
.Render(); %></td>
</tr>
<tr>
<td>Item:</td>
<td><% this.Html.Telerik().AutoComplete()
.Name("ItemName")
.DataBinding(binding => {
binding.Ajax()
.Cache(false)
.Select("GetSectionItemNames", "Scoring", new {
sectionName = ""
});
})
.Filterable(filtering => {
filtering.FilterMode(AutoCompleteFilterMode.Contains);
filtering.MinimumChars(1);
})
.AutoFill(true)
.Multiple(m => m.Enabled(false))
.HighlightFirstMatch(true)
.Render(); %></td>
</tr>
<tr>
<td>Operator:</td>
<td><% this.Html.RenderAction("RuleOperatorComboBox", "Scoring", new {
valueRule = this.Model
}); %></td>
</tr>
<tr>
<td>Value 1:</td>
<td><%: this.Html.TextBoxFor(r => r.Value1) %></td>
</tr>
<tr>
<td>Value 2:</td>
<td><%: this.Html.TextBoxFor(r => r.Value2) %></td>
</tr>
<tr>
<td>Result/Weight:</td>
<td><% this.Html.Telerik().NumericTextBoxFor(vr => vr.Result)
.MinValue(1)
.MaxValue(500)
.DecimalDigits(0)
.Value(1)
.Render(); %></td>
</tr>
</table>
如果我摆脱编辑器模板,Telerik网格可以很好地播放。不幸的是,默认编辑器在生产应用程序中有很多不足之处。
答案 0 :(得分:1)
事实证明,这似乎是Telerik的MVC扩展的一个错误。我还没有阅读他们的发行说明,但我今天早上下载并安装了最新版本。这个特殊的错误不再起作用。
他们也添加了一些其他不错的功能。对我来说最重要的一个是批量单元格编辑。 =)
答案 1 :(得分:0)
我试图在Telerik论坛上搜索一下,看看你在该网站上的回复可能是什么,但是如果它与这里的响应类似,我会给你一个快速提示。请确保包含与您的说明一致的代码段,因为您的实施可能是罪魁祸首。
如果您没有在第一篇文章中包含代码,我强烈建议您在Telerik论坛的特定主题中进行跟进,因为代码将允许某人更好地了解您收到此错误的原因。