Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 4 MVC剑道网格,使用MultiSelect-can';无法获取模型中的选定项_Asp.net Mvc 4_Kendo Asp.net Mvc_Multi Select - Fatal编程技术网

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"))
)