Как получить значения checkboxlist в контроллере в asp.net mvc - PullRequest
0 голосов
/ 23 апреля 2010

У меня есть форма на странице просмотра, которая выглядит следующим образом:

<form runat="server" id="dcrsubmit">
<asp:CheckBoxList ID="CheckBoxList1" runat="server">
<asp:ListItem>test1</asp:ListItem>
<asp:ListItem>test2</asp:ListItem>
<asp:ListItem>test3</asp:ListItem>
<asp:ListItem>test4</asp:ListItem>
<asp:ListItem>test5</asp:ListItem>
<asp:ListItem>test6</asp:ListItem>
</asp:CheckBoxList>

....other controls
</form>

Теперь, когда форма размещена, я пытаюсь получить значения, представленные в контроллере, как показано ниже:

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult testmethod(FormCollection formValues)
{
  string s = formvalues.get("CheckBoxList1");
   .
   .  /* other code */
   .
}

Строковое значение показывает ноль, когда я отправляю форму, установив несколько флажков. Это способ получения значений или я делаю что-то не так? И я не могу использовать элемент управления html, потому что все остальные элементы управления в форме являются серверными элементами управления, и я не уверен, смогу ли я сделать этот элемент управления только элементом управления html. И я не уверен, как я могу привязать значения к нему?

Ответы [ 2 ]

2 голосов
/ 29 апреля 2010

MVCContrib предоставляет несколько превосходных расширений для множества элементов управления, а также имеет CheckBoxList.

Чтобы начать работу с MVCContrib, прочитайте это

Вам нужно будет использовать строго типизированное представление и включить этот оператор импорта в представление:

<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<MvcApplication1.Models.HomeModel>" %>
<%@ Import Namespace="MvcContrib.FluentHtml" %>

Этот пример работает. Вот код на представлении.

    <%= this.CheckBoxList("UserType").Options(Model.UserTypeOptions) %>

Вот контроллер.

    [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult Submit(HomeModel viewModel)
    {
        if (viewModel.SelectedUserType == UserTypeEnum.Normal)
        {
            // do something
        }
        return View("Index", viewModel);
    }

Вот модель.

public enum UserTypeEnum
{
    Administrator = 0,
    SuperUser,
    Supervisor,
    Normal,
}
public class HomeModel
{
    [Required]
    public string Name { get; set; }

    public List<SelectListItem> UserTypeOptions { get; set; }
    public string UserType { get; set; }

    public UserTypeEnum SelectedUserType
    {
        get
        {
            return (UserTypeEnum) Enum.Parse(typeof (UserTypeEnum), UserType);
        }
    }

    public HomeModel()
    {
        UserTypeOptions = new List<SelectListItem>
                       {
                           new SelectListItem{Text = "Administrator", Value = ((int)UserTypeEnum.Administrator).ToString()},
                           new SelectListItem{Text = "SuperUser", Value = ((int)UserTypeEnum.SuperUser).ToString()},
                           new SelectListItem{Text = "Supervisor", Value = ((int)UserTypeEnum.Supervisor).ToString()},
                           new SelectListItem{Text = "Normal", Value = ((int)UserTypeEnum.Normal).ToString()},
                       };
    }
}
0 голосов
/ 27 октября 2011

Я думаю, что вам нужно, как собрать выбранные значения из CheckBoxList, выбранного пользователем, и вот мое решение для этого:

1 - Загрузите Jquery.json.js и добавьте его в свой вид как ссылку:

<script src="../../Scripts/jquery.json.js" type="text/javascript"></script>
2- I've added a ".cssMyClass" to all checkboxlist items so I grab the values by their css class: 


 <script type="text/javascript" >
       $(document).ready(function () {
           $("#btnSubmit").click(sendValues);
         });

         function populateValues()
         {
             var data = new Array();
             $('.myCssClas').each(function () {
                 if ($(this).attr('checked')) {
                     var x = $(this).attr("value");
                     data.push(x);
                 }
             }); 

             return data;
         }

         function sendValues() {
             var data = populateValues();
                   $.ajax({
                       type: 'POST',
                       url: '@Url.Content("~/Home/Save")',
                       data: $.json.encode(data),
                       dataType: 'json',
                       contentType: 'application/json; charset=utf-8',
                       success: function () { alert("1"); }
                   });

           } 



     </script>

3 - Как видите, я добавил все выбранные значения в массив и передал его в действие «Сохранить» контроллера «Домой» с помощью ajax. 4- в контроллере вы можете получить значения, добавив массив в качестве аргумента:

 [HttpPost]
        public ActionResult Save(int[] val)
        {

Я слишком много искал, но, видимо, это единственное решение. Пожалуйста, дайте мне знать, если вы найдете лучшее решение для этого.

...