【问题标题】:How to pass kendo multiselect values to contoller in asp.net mvc如何将剑道多选值传递给asp.net mvc中的控制器
【发布时间】:2015-11-09 14:09:38
【问题描述】:

我在控制器中有以下代码。

 companyModel.lstusers = userBL.GetPayrollNotificationUsers();
 companyModel.emails = companyBL.getEmails();

lstusersemails 是模型中的属性。

    public List<UserListModel> lstusers { get; set; }
    public List<EmailModel> emails { get; set; }

我有两个剑道多选视图。

 @(Html.Kendo().MultiSelect()
             .Name("lstusers")
             .HtmlAttributes(new { style = "width:200px" })
             .AutoClose(false)
             .Placeholder("Select User")
             .BindTo(new SelectList(Model.lstusers, "userId", "name"))
             .Value(new SelectList(Model.lstusers))
 )

 @(Html.Kendo().MultiSelect()
          .Name("emails")
          .HtmlAttributes(new { style = "width:200px" })
          .AutoClose(false)
          .Placeholder("Select emails")
          .BindTo(new SelectList(Model.emails, "EmailAddressId", "EmailAddress"))
          .Value(new SelectList(Model.emails))
 )

在 post 方法中,我将此视图传递给控制器​​。

  public ActionResult EditCompany(CompanyModel companyModel)

现在,我在公司模型中为 lstusers 和电子邮件获取空值。有人可以帮我解决这个问题吗?

Model Screenshot

【问题讨论】:

    标签: asp.net asp.net-mvc


    【解决方案1】:

    您的列表和所选项目需要单独的属性.. 向您的模型添加另外 2 个属性..

    public List<UserListModel> lstusers { get; set; }
    public List<EmailModel> emails { get; set; }
    public string[] selectedUsers { get; set; }
    public string[] selectedEmails { get; set; }
    

    然后将这些名称用作多选的名称

     @(Html.Kendo().MultiSelect()
                 .Name("selectedUsers")
                 .HtmlAttributes(new { style = "width:200px" })
                 .AutoClose(false)
                 .Placeholder("Select User")
                 .BindTo(new SelectList(Model.lstusers, "userId", "name"))
                 .Value(new SelectList(Model.lstusers))
     )
    
     @(Html.Kendo().MultiSelect()
              .Name("selectedEmails")
              .HtmlAttributes(new { style = "width:200px" })
              .AutoClose(false)
              .Placeholder("Select emails")
              .BindTo(new SelectList(Model.emails, "EmailAddressId", "EmailAddress"))
              .Value(new SelectList(Model.emails))
     )
    

    【讨论】:

      【解决方案2】:

      使用 MultiSelectFor 代替 MultiSelect 帮助程序。 MultiSelectFor 帮助器提供了一个真正绑定到您的属性(获取和设置)的组件。

      例子:

      @(Html.Kendo().MultiSelectFor(m => m.lstusers)
               .HtmlAttributes(new { style = "width:200px" })
               .AutoClose(false)
               .Placeholder("Select User")
               .BindTo(Model.YourDataSourceForUsersList)
      

      其中YourDataSourceForUsersList 表示模型的一个属性,其中包含多选列表中应该可用的所有值。

      【讨论】:

        【解决方案3】:

        要添加到已经给出的答案,此外,如果您的来源列表是基于搜索的动态列表,您可以这样做:

        @(Html.Kendo().MultiSelect()
        .Name("emails")
        .Placeholder("Email...")
        .DataTextField("Text")
        .DataValueField("Value")
        .AutoBind(false)
        .Value(Model.emails)
        .HtmlAttributes(new { @class = "col form-control"})
        .DataSource(source => {
             source.Read(read =>
             {
                 read.Action("StaffEmail", "Home");
             })
             .ServerFiltering(true);
           })
         )
        

        Home 控制器代码示例:

        public JsonResult StaffEmail(string text)
        {
           using (var dbContext = new YourDBContext())
           {
              List<SelectListItem> staffEmail = new List<SelectListItem>();
              if (!string.IsNullOrEmpty(text))
              {
                 staffEmail = YourResultsFromDB.Where(w => w.YourEmailProp.Contains(text)).
                 Select(s => new SelectListItem
                 {
                    Text = s.eMail,
                    Value = s.eMail
                 }).ToList();                    
              }                
              return Json(staffEmail, JsonRequestBehavior.AllowGet);
           }
        }
        

        将保存的值绑定到多选的代码,例如。在编辑视图上:

        YourViewModel.emails = new SelectList(YourDataset.SelectedEmailsArr.Select(
        s => new SelectListItem { Text = s, Value = s }).ToList();                  
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-09-25
          • 2020-09-02
          • 2015-07-09
          • 2012-12-31
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多