Asp.net mvc 4 MVC剑道网格,使用MultiSelect-can';无法获取模型中的选定项
标题说明了一切 弹出式窗体:Asp.net mvc 4 MVC剑道网格,使用MultiSelect-can';无法获取模型中的选定项,asp.net-mvc-4,kendo-asp.net-mvc,multi-select,Asp.net Mvc 4,Kendo Asp.net Mvc,Multi Select,标题说明了一切 弹出式窗体: @using Kendo.Mvc.UI @using Batc.AgileApp.Web.Areas.ProductReuse.Models @model BomViewModel @Html.HiddenFor(m => m.BomId) @Html.HiddenFor(m => m.Row) @Html.HiddenFor(m => m.UserWorkSessionId) <div class="container-fluid"&
@using Kendo.Mvc.UI
@using Batc.AgileApp.Web.Areas.ProductReuse.Models
@model BomViewModel
@Html.HiddenFor(m => m.BomId)
@Html.HiddenFor(m => m.Row)
@Html.HiddenFor(m => m.UserWorkSessionId)
<div class="container-fluid">
<div class="form-group row">
<div class="col-xs-4 col-sm-4">
<span>
@Html.LabelFor(model => model.ProductClass)
</span>
<br/>@(Html.Kendo().DropDownListFor(m => m.ProductClass)
.DataTextField("Text")
.DataValueField("Value")
.HtmlAttributes(new {style = "width:125px"})
.DataSource(source =>
{
source.Read(read => { read.Action("GetDropDownLookups", "AjaxProductReuse", new {id = "ProductClass"}); });
})
)
<div style="font-weight: normal;">
@Html.ValidationMessageFor(model => model.ProductClass)
</div>
</div>
<div class="col-xs-4 col-sm-4">
<span>
@Html.LabelFor(model => model.ProgramSelectedList)
</span>
@(Html.Kendo().MultiSelectFor(m => m.ProgramSelectedList)
.Placeholder("Select program...")
.HtmlAttributes(new {style = "width:200px"})
.DataSource(source =>
{
source.Read(read => { read.Action("GetLookups", "AjaxProductReuse", new {id = "Program"}); });
})
)
<div style="font-weight: normal;">
@Html.ValidationMessageFor(model => model.ProgramSelectedList)
</div>
</div>
</div>
</div>
我所期望的是:
sort=
&group=
&filter=
&Program=PROGRAM_01, PROGRAM_02
&ProgramSelectedList=PROGRAM_01
&ProgramSelectedList=PROGRAM_02
&UserWorkSessionId=45
&Row=10
&ProductClass=1
&BomId=151927
在Kendo、JQuery或.NET中是否有“特殊”设置使此列表正确运行?我目前只在MVC HTML助手模式下使用剑道。这意味着我几乎没有JS在UI端支持我想要的操作
这是一个内部LOB应用程序,使用率低,用户少。经过大量挖掘和挫折,答案非常简单。我需要添加一个JS助手来将数据转换成MVC模型绑定器可以理解的格式
<script>
function getUpdatedBomRowData() {
var program = $("#ProgramSelectedList").data("kendoMultiSelect").value().toString();
return {
program: program
}
}
</script>
然后,JS会在发送到控制器之前将逗号分隔的字符串放入程序属性中。由于该程序被用作(A)表字段的DB表示,以及(B)列表ProgramSelectedList的支持字段,我的代码现在似乎很高兴。经过大量挖掘和挫折,答案非常简单。我需要添加一个JS助手来将数据转换成MVC模型绑定器可以理解的格式
<script>
function getUpdatedBomRowData() {
var program = $("#ProgramSelectedList").data("kendoMultiSelect").value().toString();
return {
program: program
}
}
</script>
然后,JS会在发送到控制器之前将逗号分隔的字符串放入程序属性中。由于程序被用作(A)表字段的DB表示,以及(B)列表ProgramSelectedList的支持字段,我的代码现在似乎很高兴。您的属性
ProgramSelectedList
的类型是列表
,因此它应该是和ProgramSelectedList[0]=Program\u 01
,以便绑定(也就是说,有索引器。你为什么希望它没有索引器?我猜你的问题与该属性中的奇怪get/set
有关。它应该是public List programmelectedlist{get;set;}
(然后在控制器方法中,你可以在Program
属性之间进行转换)MVC model binder没有正确理解数组表示法。它需要$param=value1¶m=value2¶m=valueN。当然它理解。这是集合的默认值提供程序,除非内容类型设置为json。这可能是一个根本问题。因为返回类型标记为JsonResult而不是ActionResult,这是否意味着模型绑定器需要JSON?这应该没有什么区别。我现在假设这是剑道网格的一个问题,但我不太清楚它序列化数据的方式。您的属性ProgramSelectedList
的类型是List
,因此它应该是&ProgramSelectedList[0]=PROGRAM_01
以绑定(即使用索引器。为什么不使用索引器?我猜您的问题与该属性中的奇数get/set
有关。它应该是公共列表ProgramSelectedList{get;set;}
(然后在控制器方法中,可以在程序
属性之间进行转换)MVC model binder没有正确理解数组表示法。它需要$param=value1¶m=value2¶m=valueN。当然它理解。这是集合的默认值提供程序,除非内容类型设置为json。这可能是一个根本问题。因为返回类型标记为JsonResult而不是ActionResult,这是否意味着模型绑定器需要JSON?这应该不会有什么区别。我现在假设这是Kendo Grid的一个问题,但我对它序列化数据的方式不太了解,因此无法确定。仍在试图弄清楚当用户提交(弹出)文件时,如何在弹出窗体上显示“进行中”微调器表单。要在弹出窗口上显示微调器,您可以使用网格数据源的requestStart
和requestEnd
事件。仍在试图弄清楚当用户提交(弹出窗口)时如何在弹出窗口表单上显示“进行中”微调器要在弹出窗口上显示微调器,可以使用网格数据源的requestStart
和requestEnd
事件。
sort=
&group=
&filter=
&Program=PROGRAM_ORIGINAL
&ProgramSelectedList[0]=PROGRAM_01
&ProgramSelectedList[1]=PROGRAM_02
&UserWorkSessionId=45
&Row=10
&ProductClass=1
&BomId=151927
sort=
&group=
&filter=
&Program=PROGRAM_01, PROGRAM_02
&ProgramSelectedList=PROGRAM_01
&ProgramSelectedList=PROGRAM_02
&UserWorkSessionId=45
&Row=10
&ProductClass=1
&BomId=151927
<script>
function getUpdatedBomRowData() {
var program = $("#ProgramSelectedList").data("kendoMultiSelect").value().toString();
return {
program: program
}
}
</script>
.DataSource(dataSource => dataSource
.Ajax()
.Model(model => { model.Id(g => g.BomId); })
.PageSize(100)
.Read(r => r.Action("GetCloneAssembly", "AjaxProductReuse").Data("ProductReuseGridReadData"))
.Update(u => u.Action("UpdateBomItem", "AjaxProductReuse").Type(HttpVerbs.Post).Data("getUpdatedBomRowData"))
.Events(e => e.Error("ajax_error").Sync("dataSource_sync").Change("dataSource_change"))
)