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

时间:2015-09-07 09:44:52

标签: 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">
            <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>

当用户点击提交按钮时,街道名称将被放入隐藏字段m.StreetNames,这是一个字符串数组。 参见

$("#submitdata").click(function () {
    var $form = $(this).closest("form");
    var streetnames = [];
    var streetnamestring;
    $.each($("#StreetNameList .street"), function (i, $street) {
        streetnames.push($street.innerHTML);
    });

    $("#StreetNames").val(streetnames);
    $form.submit();
 });

在视图模型上,StreetNames定义为

public string[] StreetNames { get; set; }

问题是当Controllor操作方法接收到视图模型时,只填充第一个项目,并且它包含用逗号分隔的整个数组。 我如何解决这个问题,以便我发布一个阵列呢?

2 个答案:

答案 0 :(得分:0)

您可以使用ajax发布您的请求 您可以使用Ajax,而您只需将ajax请求中的传统设置为值true

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

答案 1 :(得分:0)

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