1

我在紧密绑定到 ViewModel 的视图中使用 @Ajax.Beginform。

我的表单中有@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)
{
}

但列表为空..请帮助。

4

2 回答 2

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>

归功于Viral Patel 博客

于 2013-11-14T08:34:18.607 回答
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();
});
于 2013-05-24T05:32:32.297 回答