如何在提交@ Ajax.Beginform()时将Model值作为参数发送

时间:2013-05-24 04:54:27

标签: ajax asp.net-mvc razor

我在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)
{
}

但是列表为空..请帮助。

2 个答案:

答案 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>

Viral Patel blog

的信用

答案 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();
});