【问题标题】:How can send List<> Model From View To Controller using Ajax Jquery in Mvc3 asp.net?如何在 Mvc3 asp.net 中使用 Ajax Jquery 将 List<> 模型从视图发送到控制器?
【发布时间】:2016-01-01 22:26:32
【问题描述】:

如何发送List&lt;int&gt; 角色模型?例如从视图到控制器。
在 Mvc3 asp.net 中使用 Ajax Jquery 不是 razor。
我正在使用此代码

var url = '<%:Url.Action("Roles","RolesManager") %>';
$.ajax({
    url: url,
    type: 'post',
    dataType: "json",
    traditional: true,
    data: $('#EditUserForm').serialize(),
    success: function () {
        $('#EditUserForm').submit();
    },
    error: function () {
    }
});

但是当我调试控制器时List&lt;int&gt; Roles = null.

页面中的模式

<%: Html.ListBoxFor(m => m.UserRoles, new MultiSelectList(Model.UserRoles, "UserRoleId", "UserRoleName"), new { @id = "UserRoles", @class = "ddlUserRolesCls" })%>

【问题讨论】:

  • 您使用的是编辑器模板吗?您的观点如何?
  • 你的参数设置正确了吗?

标签: asp.net-mvc asp.net-mvc-3


【解决方案1】:

这是一个模型绑定列表,在这种情况下,您必须使用 html 输入标签的 name 属性中的参数的相同名称发送信息,asp.net 模型绑定器会将其转换为集合上的集合邮政。你的 javascript 看起来不错。试试这样的:

在视图中:

<input type="text" name="roles" value="1" />
<input type="text" name="roles" value="4" />
<input type="text" name="roles" value="2" />
<input type="text" name="roles" value="8" />

在控制器中:

public ActionResult Post(List<int> roles) 
{
    // process
}

还可以看看这篇文章: http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx

【讨论】:

    【解决方案2】:

    像这样更改您的视图模型。请注意,我们有一个 int 数组 类型的SelectedUserRoles 属性。

    public class EditUserRole
    {  
      public List<SelectListItem> UserRoles{ get; set; }
      public int[] SelectedUserRoles { set; get; }
      //Also other relevant properties here
    }
    

    在我的 Get Action 中,填写 UserRoles 属性

    public ActionResult EditUser(int id)
    {
      var vm=new EditUserRole();
      vm.UserRoles=GetUserRoles();
    }
    public List<SelectListItem> GetUserRoles()
    {
      var roles= new List<SelectListItem>();
      // the below is hardcoded. Get it from DB And fill it here
      roles.Add(new SelectListItem { Value="1",Text="Admin" });
      roles.Add(new SelectListItem { Value = "2", Text = "Editor" });
      return roles;
    }
    

    在你看来,EditUserRole 是强类型的,

    @Html.ListBoxFor(m => m.SelectedUserRoles,
                  new MultiSelectList(Model.UserRoles, "Value", "Text"),
                              new { @id = "UserRoles", @class = "ddlUserRolesCls" })
    

    当您发布表单时,您将在发布模型的SelectedUserRoles 属性中获得选定的角色 ID。

    [HttpPost]
    public ActionResult Edit(EditUserRole model)
    {
      // check model.SelectedUserRoles
      // to do : Save and redirect
    }
    

    【讨论】:

    • 我需要未选中列表中的所有项目
    • 我从列表中选择角色并将所选角色添加到另一个
    • 为什么需要所有物品?您可以像在 GET 操作中一样在 POST 操作中获取它。
    • 因为我有两个 Html ListBox,第一个用于角色,另一个用于选定角色,我需要从第二个 Html.ListBox 获取所有项目,因为批准代码让我最后选择项目
    • 对每个循环使用 jquery 从第二个项目中获取项目并发送它。
    猜你喜欢
    • 2011-08-09
    • 1970-01-01
    • 2018-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-16
    • 2021-02-09
    • 1970-01-01
    相关资源
    最近更新 更多