ASP.NET MVC AJAX表单提交在提交/发布操作后丢失ListBoxFor / MultiSelectList

开关386

通过Ajax提交时,我的selectedActiveRoles和selectedInactiveRoles没有作为我的视图模型的一部分传递到控制器,并且我没有找到任何专门解决此问题的方法。当我刚发布表单时,它运行良好。

我的表格:

@using (Html.BeginForm(null, null, FormMethod.Post, new { id = "editForm", @class = "form-horizontal" }))
{
    <div class="row">
        <div id="dualListBoxContainer">
            <div class="form-group">
                <label class="col-xs-2 control-label">Available Roles:</label>
                <div class="col-xs-8 input-group">
                    @Html.ListBoxFor(model => model.SelectedInactiveRoles, new MultiSelectList(Model.InactiveRoles, "RoleId", "Description", @Model.SelectedInactiveRoles), new { @class = "form-control", name = "inactiveRoles", multiple = "multiple", size = 5 })
                </div>
            </div>
            <div class="form-group">
                <div class="col-xs-10 col-xs-offset-1 col-sm-8 col-sm-offset-2 text-center">
                    <button type="button" class="btn btn-sm btn-primary" id="addRole"> <i class="fa fa-arrow-down"></i> Add </button>
                    &nbsp; &nbsp; &nbsp;
                    <button type="button" class="btn btn-sm btn-primary" id="removeRole"> Remove <i class="fa fa-arrow-up"></i> </button>
                </div>
            </div>
            <div class="form-group">
                <label class="col-xs-2 control-label">Active Roles:</label>
                <div class="col-xs-8 input-group">
                    @Html.ListBoxFor(model => model.SelectedActiveRoles, new MultiSelectList(Model.ActiveRoles, "RoleId", "Description", @Model.SelectedActiveRoles), new { @class = "form-control", name = "activeRoles", multiple = "multiple", size = 5 })
                </div>
            </div>
            <div class="form-group">
                <div class="col-xs-8 col-xs-offset-2 text-right">
                    <button type="submit" class="btn btn-primary" id="saveChanges">Save Changes &nbsp;<i class="fa fa-save"></i></button>
                </div>
            </div>

        </div>
    </div>
}

模型:

    public class MyViewModel
    {
        public User User { get; set; }
        public Client Client { get; set; }
        public IEnumerable<Role> ActiveRoles { get; set; }
        public IEnumerable<Role> InactiveRoles { get; set; }
        public IList<int> SelectedActiveRoles { get; set; }
        public IList<int> SelectedInactiveRoles { get; set; }
    }

JS / JQuery:

$('#editForm')
    .submit(function(e) {
        e.preventDefault();

        // modifies the 'selected' options on the list
        // before finally being submitted by the browser
        $('#SelectedInactiveRoles, #SelectedActiveRoles')
            .prop('selected', true);

        $.ajax({
            url: $("#editForm").attr('action'),
            type: 'post',
            data: $(this).serialize(),
            success: function() {

                $("#modalContainer")
                    .fadeOut(500,
                        function() {
                            $("#modalContainer").empty();
                        });
            }
        });
    });

控制器:

public ActionResult Edit([Bind] MyViewModel)
        {
              return null;
        }
用户名

您没有向控制器发送任何有效数据,因为在中$(this).serialize(),this是ajax请求,而不是表单。您需要在ajax调用之前序列化表单数据

$('#editForm').submit(function(e) {
    var formData = $(this).serialize();
    ....
    $.ajax({
        ....
        data: formData,
        success: function() {

但是,您的代码还有许多其他问题。

您的ListBoxFor()代码应为

@Html.ListBoxFor(m => m.SelectedInactiveRoles, 
    new SelectList(Model.InactiveRoles, "RoleId", "Description"),
    new { @class = "form-control", size = 5 }
)
  1. 没有添加点,multiple="multiple"因为该方法已经添加了它。
  2. 添加一点没有意义,name= "inactiveRoles"因为它绝对不执行任何操作-检查生成的html,您将看到它的name="SelectedInactiveRoles",而不是name="inactiveRoles"(这很幸运,否则您可以覆盖该name属性,这将导致模型绑定失败)
  3. 生成SelectList-在第4个参数中添加-确定其选择内容的属性的值是毫无意义的(您可以在第4个参数中输入所需的任何值,并且该ListBoxFor()方法会忽略该值

最后,从控制器方法中删除$('#SelectedInactiveRoles, #SelectedActiveRoles').prop('selected', true);(这毫无意义,什么也不做)[Bind]

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

asp.net mvc ListBoxFor-MultiSelectList不应用所选的项目

来自分类Dev

提交表单时,MVC MultiSelectList发布NULL

来自分类Dev

使用ASP.NET Core MVC MultiSelectList更新多对多实体

来自分类Dev

使用ASP.NET Core MVC MultiSelectList更新多对多实体

来自分类Dev

带有 MultiSelectList 的 ASP.NET MVC5 Razor ListBox

来自分类Dev

Ajax提交到asp.net mvc发布操作或将集合转换为json?

来自分类Dev

单击按钮并验证后如何调用使用ajax的asp.net MVC表单提交事件?

来自分类Dev

在asp.net mvc 5中使用jQuery成功调用ajax后提交表单

来自分类Dev

MVC MultiSelectList绑定

来自分类Dev

ASP.net MVC 表单提交总是调用 GET 操作而不是 POST

来自分类Dev

提交简单表单MVC ASP.Net网站的StackOverflow异常

来自分类Dev

ASP.Net MVC 4在表单提交时设置“ onsubmit”

来自分类Dev

选中“ ASP.NET MVC提交表单”复选框

来自分类Dev

ASP.NET MVC 5 最佳实践表单提交

来自分类Dev

提交表单后如何显示加载图标,但如果模型在ASP .NET MVC中无效,则如何显示

来自分类Dev

在MVC 4 ASP.net中提交表单后,保存dropdownlist状态和单选按钮状态

来自分类Dev

提交表单后在 mvc asp.net 中打开一个弹出窗口

来自分类Dev

Ajax表单提交与ASP.NET MVC 6中的文件

来自分类Dev

在Asp.Net MVC 4中使用AJAX提交表单

来自分类Dev

如何获取FormData对象并通过Ajax使用ASP.NET MVC提交表单数据

来自分类Dev

拦截的表单提交在jQuery和ASP.NET MVC上生成阻止的Ajax请求

来自分类Dev

如何获取FormData对象并通过Ajax使用ASP.NET MVC提交表单数据

来自分类Dev

单击提交按钮后的ASP.Net MVC弹出消息

来自分类Dev

在Asp.net Core中提交Ajax表单后的RedirectToAction

来自分类Dev

Ajax在MVC AsP.net中发布表单(验证)?

来自分类Dev

Ajax在MVC AsP.net中发布表单(验证)?

来自分类Dev

ASP.NET MVC Ajax 提交带有 AntiforgeryToken 的表单和带有验证的序列化表单数据

来自分类Dev

在发布方法中丢失的ASP.NET MVC对象

来自分类Dev

ASP.NET MVC会话变量丢失

Related 相关文章

  1. 1

    asp.net mvc ListBoxFor-MultiSelectList不应用所选的项目

  2. 2

    提交表单时,MVC MultiSelectList发布NULL

  3. 3

    使用ASP.NET Core MVC MultiSelectList更新多对多实体

  4. 4

    使用ASP.NET Core MVC MultiSelectList更新多对多实体

  5. 5

    带有 MultiSelectList 的 ASP.NET MVC5 Razor ListBox

  6. 6

    Ajax提交到asp.net mvc发布操作或将集合转换为json?

  7. 7

    单击按钮并验证后如何调用使用ajax的asp.net MVC表单提交事件?

  8. 8

    在asp.net mvc 5中使用jQuery成功调用ajax后提交表单

  9. 9

    MVC MultiSelectList绑定

  10. 10

    ASP.net MVC 表单提交总是调用 GET 操作而不是 POST

  11. 11

    提交简单表单MVC ASP.Net网站的StackOverflow异常

  12. 12

    ASP.Net MVC 4在表单提交时设置“ onsubmit”

  13. 13

    选中“ ASP.NET MVC提交表单”复选框

  14. 14

    ASP.NET MVC 5 最佳实践表单提交

  15. 15

    提交表单后如何显示加载图标,但如果模型在ASP .NET MVC中无效,则如何显示

  16. 16

    在MVC 4 ASP.net中提交表单后,保存dropdownlist状态和单选按钮状态

  17. 17

    提交表单后在 mvc asp.net 中打开一个弹出窗口

  18. 18

    Ajax表单提交与ASP.NET MVC 6中的文件

  19. 19

    在Asp.Net MVC 4中使用AJAX提交表单

  20. 20

    如何获取FormData对象并通过Ajax使用ASP.NET MVC提交表单数据

  21. 21

    拦截的表单提交在jQuery和ASP.NET MVC上生成阻止的Ajax请求

  22. 22

    如何获取FormData对象并通过Ajax使用ASP.NET MVC提交表单数据

  23. 23

    单击提交按钮后的ASP.Net MVC弹出消息

  24. 24

    在Asp.net Core中提交Ajax表单后的RedirectToAction

  25. 25

    Ajax在MVC AsP.net中发布表单(验证)?

  26. 26

    Ajax在MVC AsP.net中发布表单(验证)?

  27. 27

    ASP.NET MVC Ajax 提交带有 AntiforgeryToken 的表单和带有验证的序列化表单数据

  28. 28

    在发布方法中丢失的ASP.NET MVC对象

  29. 29

    ASP.NET MVC会话变量丢失

热门标签

归档