我在View中使用@ Ajax.Beginform,它与ViewModel紧密绑定。
我在我的表单中使用了@ Html.ListBoxFor。我使用jQuery添加和删除列表框中的项目。现在我想要实现的是提交按钮的onpress,它应该发送列表框中存在的完整数据,无论选择哪个。目前,如果我选择列表框中的所有项目并按下提交按钮,它会将列表发送到控制器。但我不想这样做。想知道如何实现这个目标吗?
可以作为表单参数发送。
@using (Ajax.BeginForm("SaveTextComponent", "LoanFilterEditor", new{ param1 = Model.listBoxItem}, new AjaxOptions { HttpMethod = "POST", OnSuccess = "SUCCESS" }))
我尝试接受控制器中的参数,如此
public ActionResult SaveTextComponent(TextComponentViewModel model, List<SelectListItem> list)
{
}
但是列表为空..请帮助。
答案 0 :(得分:1)
也许您可以使用此javascript选择列表框中的所有项目,然后将其发送给控制器:
function listbox_selectall(listID, isSelect) {
var listbox = document.getElementById(listID);
for(var count=0; count < listbox.options.length; count++) {
listbox.options[count].selected = isSelect;
}
}
之后,您可以通过以下方式调用表单上的函数:
<script>
function submit() {
listbox_selectall('righthand_side_listbox_id', true);
return true;
}
</script>
<form onsubmit="return submit()">
...
</form>
的信用
答案 1 :(得分:0)
你可以效仿我的例子:
型号:
pulic class TextComponentViewModel {
public int[] SelectedListItem { get; set; }
public List<Item> ListItem { get; set; }
}
public class Item {
public int Id { get; set; }
public String Name { get; set; }
}
查看:
@model TextComponentViewModel
@using (Ajax.BeginForm("SaveTextComponent", "LoanFilterEditor", null, new AjaxOptions { HttpMethod = "POST", OnSuccess = "SUCCESS" }, new {name = "mainForm", id = "mainForm"}))
{
@Html.ListBoxFor(model => model.SelectedListItem , new MultiSelectList(Model.ListItem, "ID", "Name"))
for(var i = 0; i < Model.ListItem.Count();i++ )
{
@Html.HiddenFor(m => m.ListItem[i].Id)
@Html.HiddenFor(m => m.ListItem[i].Name)
}
<input type = "submit" id="submitButton" />
}
控制器:
public ActionResult SaveTextComponent(TextComponentViewModel model)
{
}
脚本:
$("#submitButton").click(function(){
$("#mainForm").submit();
});