我已经实现了剑道下拉的级联功能。在尝试保存信息时,我无法在viewmodel中获取组合的值。如果我注释name属性,我确实得到了值,但我需要name属性才能使级联功能起作用。我正在尝试使用jquery设置模型值但遇到错误的解决方法。有人可以告诉我如何解决这个问题。
销售组织组合
<div class="form-group">
@Html.LabelFor(model => model.Company, htmlAttributes: new { @class = "control-label col-md-4" })
<div class="col-md-6">
<div class="editor-field">
@(Html.Kendo().ComboBoxFor(model => model.CountryCode)
.Name("SalesOrganisation")
.HtmlAttributes(new { style = "width:100%" })
.DataTextField("CompanyCodeCompany")
.DataValueField("CountryCode")
.Filter("contains")
.MinLength(3)
.DataSource(dataSource => dataSource
.Read(read => read.Action("RequestHeader_SalesOrganisation", "Request").Type(HttpVerbs.Post))
.ServerFiltering(true)
)
)
</div>
@Html.ValidationMessageFor(model => model.Company, "", new { @class = "text-danger" })
</div>
</div>
销售办公室组合
<div class="form-group">
@Html.LabelFor(model => model.SalesOffice, htmlAttributes: new { @class = "control-label col-md-4" })
<div class="col-md-6">
<div class="editor-field">
@(Html.Kendo().ComboBoxFor(model => model.SalesOfficeID)
// .Name("SalesOffice")
.HtmlAttributes(new { style = "width:100%" })
.DataTextField("SalesOffice")
.DataValueField("SalesOfficeID")
.AutoBind(false)
.Value("")
.DataSource(dataSource => dataSource
.Read(read =>
{
read.Action("RequestHeader_SalesOffice", "Request")
.Type(HttpVerbs.Post)
.Data("GetFilterOption");
}).ServerFiltering(true)
).CascadeFrom("SalesOrganisation").Filter("contains")
)
</div>
@Html.ValidationMessageFor(model => model.SalesOffice, "", new { @class = "text-danger" })
</div>
</div>
Javascript for cascading feature to work
function GetFilterOption() {
return {
id: $('#SalesOrganisation').val()
}
}
Javascript - 尝试设置无效的模型
function GetFilterOption() {
var countryCode = $('#SalesOrganisation').val();
var model = $('#SalesOrganisation').data('kendoComboBox');
model.value = countryCode;
return id = countryCode;
}
答案 0 :(得分:0)
使用.ComboBoxFor()时,不应使用.Name()。
使用.ComboBoxFor(m =&gt; m.FieldName)时,id / name属性将设置为&#34; FieldName&#34;通过剑道实施Razor助手和匹配模型字段的名称。
如果您随后使用.Name(&#34; SomeOtherFieldName&#34;),则将id / name属性更改为&#34; SomeOtherFieldName&#34;并且不再匹配模型的字段名称,这就是您不再获得该值的原因。
你想要做的是 not 使用.Name()并适当地设置.CascadeFrom(),即
@(Html.Kendo().ComboBoxFor(model => model.CountryCode)
....
@(Html.Kendo().ComboBoxFor(model => model.SalesOfficeID)
.CascadeFrom("CountryCode")
function GetFilterOption() {
return {
id: $('#CountryCode').val()
}
}