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)