【问题标题】:How to send Model value as parameter while submitting @Ajax.Beginform()如何在提交@Ajax.Beginform() 时将模型值作为参数发送
【发布时间】:2013-05-24 04:54:26
【问题描述】:

我在紧密绑定到 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)
{
}

但是列表是空的..请帮忙。

【问题讨论】:

    标签: ajax asp.net-mvc razor


    【解决方案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

    【讨论】:

      【解决方案2】:

      你可以按照我的例子:

      型号:

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

      【讨论】:

      • 谢谢.. 但即使没有选择任何项目,我也希望提交列表框中的整个列表。我做了和你一样的方法。只有当我选择它们时它才会发送项目。
      • 您不需要在for 循环中指定名称属性。 HiddenFor 会自动设置。
      • 请查看我的更改和here。我希望它可以帮助你:)
      • @mattytommo 我觉得没关系 :)
      • 谢谢。但它仍然不能解决我的问题。因为我使用 jQuery 将各种项目添加到列表框中,并且这些项目不会被 Model.ListItem 拾取。现在它只发送最初由控制器发送的项目。你能建议一些其他的解决方法吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-02-25
      • 1970-01-01
      • 2013-11-02
      • 2011-09-07
      • 2017-06-19
      • 2020-11-28
      • 2021-09-30
      相关资源
      最近更新 更多