Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/73.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
mvc/JQuery-发布带有数组的表单Viewmodel_Jquery_Asp.net Mvc - Fatal编程技术网

mvc/JQuery-发布带有数组的表单Viewmodel

mvc/JQuery-发布带有数组的表单Viewmodel,jquery,asp.net-mvc,Jquery,Asp.net Mvc,也许有更好的方法可以做到这一点。 在我的表单中,用户可以输入街道名称列表,如下所示: <div class="row"> <div class="col-md-2"> <label for="StreetName">By Street Name(s) </label> </div> <div class="ui-widget col-md-6">

也许有更好的方法可以做到这一点。 在我的表单中,用户可以输入街道名称列表,如下所示:

   <div class="row">
        <div class="col-md-2">
            <label for="StreetName">By Street Name(s) </label>
        </div>
        <div class="ui-widget col-md-6">
            <input id="StreetName" style="width: 500px;">
        </div>
    </div>
    <div class="row">
        <div class="col-md-3" style="padding-left: 0; vertical-align: top">
            <label for="StreetNameList">Selected Streetnames List:</label>
        </div>
    </div>
    <div class="row">
        <div class="col-md-5" style="height: 200px; width: 600px; overflow: auto; border: gray solid 1px; background: whitesmoke">
            <div id="StreetNameList" name="StreetNameList" style="height: 200px; width: 600px;"></div>
            @Html.HiddenFor(m => m.StreetNames)
        </div>
    </div>
在视图模型上,街道名称定义为

public string[] StreetNames { get; set; }
问题在于,当controller操作方法接收到视图模型时,只填充第一个项,它包含由逗号分隔的整个数组。
我如何解决这个问题,让我得到一个数组来代替发布?

您可以使用ajax发布您的请求 您可以改用Ajax,只需在Ajax请求中将traditional设置为true

$.ajax({
    type: "POST",
    url: "youraction",
    dataType: "json",
    traditional: true,
    data: {
        //your data
    }
});

您可以使用ajax发布您的请求 您可以改用Ajax,只需在Ajax请求中将traditional设置为true

$.ajax({
    type: "POST",
    url: "youraction",
    dataType: "json",
    traditional: true,
    data: {
        //your data
    }
});

我最后做的是发布一个带有分隔符的字符串,我用它在服务器端将字符串拆分为一个数组。看起来这是除了重写和使用AJAX之外的唯一解决方案。

我最后做的是发布一个带有分隔符的字符串,我用它在服务器端将字符串拆分为一个数组。看起来这是唯一一个缺少重写和使用AJAX的解决方案。

使用AJAX调用需要大量代码才能更改。如果没有其他人给出答案,我可能会这样做。因为javascript变量/ojects使用基于赋值的动态数据类型,所以没有直接的方法将它们映射到C#等价物。JSON弥补了这一差距,ajax提供了有效的方法来完成它。@NZeta520,
DefaultModelBinder
读取表单数据的名称/值对。只要控件的name属性与模型属性名称匹配,它就会被正确绑定。这不需要Ajax和JSON。使用Ajax调用需要大量代码才能更改。如果没有其他人给出答案,我可能会这样做。因为javascript变量/ojects使用基于赋值的动态数据类型,所以没有直接的方法将它们映射到C#等价物。JSON弥补了这一差距,ajax提供了有效的方法来完成它。@NZeta520,
DefaultModelBinder
读取表单数据的名称/值对。只要控件的name属性与模型属性名称匹配,它就会被正确绑定。这不需要Ajax和JSON,您显示的代码不清楚。您没有任何带有
class=“street”
的元素。不需要使用隐藏的输入。如果您有多个用于添加街道名称的输入(未从显示的代码中清除),那么只要这些输入具有正确的
name
属性,您的属性将被正确绑定(不需要javascript),您显示的代码不清楚。您没有任何带有
class=“street”
的元素。不需要使用隐藏的输入。如果您有多个用于添加街道名称的输入(显示的代码不清楚),那么只要这些输入具有正确的
name
属性,您的属性就会正确绑定(不需要javascript)