2013-09-20 3 views
1

У меня есть несколько значений флажков в форме. Я сериализую форму и отправляю на контроллер mvc в виде данных JSON. Как я могу де-сериализовать значения флажка?Как де-сериализовать данные JSON значений флажков?

Это мой HTML -

@using (Html.BeginForm("SaveOfficeConfiguration", "Offices", FormMethod.Post, new { Id = "frmOfficeConfigSave" })) 
{ 
<div id="divOfficeForm"> 
    <div style="width: auto; height: auto; border: 3px outset silver;"> 
     <table class="mainsectionable" width="100%"> 
      <thead> 
       <tr> 
        <th style="text-align: center;"> 
         <center>KCCM Profile Access</center> 
        </th> 
       </tr> 
       <tr> 
        <td> 
         @using (Html.BeginForm()) 
         { 
          IEnumerable<SelectListItem> Brands = ViewBag.GetBrands; 
          foreach (var item in Brands) 
          { 
          @Html.CheckBox("KCCM_Brands", false, new 
                 { 
                  value = item.Value 
                 }); 
          <label>@item.Text</label><br /> 
              } 
             } 
        </td> 
       </tr> 
      </thead> 
     </table> 
    </div> 
</div> 
} 

Это мой Javascript функции-

function SaveOfficeConfigNew() { 
    var officeID = $('input[name="hdnOfficeID"]').val(); 
    var url = "/OfficeManagement/Offices/SaveOfficeConfiguration?officeID=" + officeID; 
    ShowWait(); 
    $.ajax({ 
     type: "POST", 
     url: url, 
     data: frmOfficeConfigSave.$('input').serialize(), 
     success: function (data) { 
      HideWait(); 
      alert(data.msg); 
     }, 
     error: function (data) { 
      HideWait(); 
      alert(data.msg); 
     } 
    }); 
    applyFilter(); 
    return false; 
} 

Это мой буду действие контроллера -

[HttpPost] 
    public ActionResult SaveOfficeConfiguration(int ? officeID, FormCollection form) 
    { 
     try 
     { 
      */.............. 
       ..............*/ 
      return Json(new 
      { 
       success = true, 
       msg = String.Empty, 
       id = 1 

      }, JsonRequestBehavior.AllowGet); 
     } 
     catch (Exception error) 
     { 
      return Json(new 
      { 
       success = false, 
       msg = error.Message, 
       id = -1 
      }, JsonRequestBehavior.AllowGet); 

     } 
    } 

ответ

0

Вы просто должны получать List<string>, с тем же именем вы указываете флажки, то есть KCM_Brands. Модель Binder будет десериализовать ее непосредственно для вас.

[HttpPost] 
public ActionResult SaveOfficeConfiguration(int ? officeID, FormCollection form, 
    List<string> KCM_Brands) 
{ 
    .... 
} 

Для сериализации ваших данных формы, чтобы разместить его, используйте функцию suggedted в этом посте:

JSON object post using form serialize not mapping to c# object

+0

пожалуйста, вы можете быть более specefic- типовую строки кода? – Sandy

+0

там у вас есть! – JotaBe

+0

Его 'null', любые проблемы в моей функции javascript? – Sandy

0

Вы можете использовать FormsCollection для получения значений флажков:

Controller :

[HttpPost] 
public ActionResult SaveOfficeConfiguration(int ? officeID, FormCollection form) 
{ 
var CheckBoxValues = form["KCCM_Brands"].Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries).Select(x=>int.Parse(x)); 
} 

Для получения дополнительной информации Информация Посмотрите здесь: http://www.mindstick.com/Articles/2ee905ba-aea1-4d83-a49d-d8d8fb10c747/?Checkbox%20control%20in%20MVC

+0

У меня есть три флажка, я проверил первый и последний, а затем отправил форму. I, когда я использовал ваш код, я получил значения как «1», «false», «false», «3», «false» ' – Sandy

+0

, вам придется удалить эти ложные данные из вашего списка. Ваши результаты дарят вам избранные checboxes. –

+0

Как узнать выбранные флажки из этих значений? – Sandy

0

Вместо

@Html.CheckBox("KCCM_Brands", false, new 
{ 
    value = item.Value 
}); 

использовать этот код для создания чекбоксов

<input type="checkbox" name="KCCM_Brands" value="@item.Value" /> 

Действие на контроллере должен выглядеть следующим образом

public ActionResult SaveOfficeConfiguration(int? officeID, List<string> KCCM_Brands) 

Когда вы публикуете свою форму, List<string> KCCM_Brands будут заполнены только значениями выбранных флажков.

Кроме того, я не знаю, если ваш браузер правильно, но я должен был сделать следующие изменения для того, чтобы работать

data: $('#frmOfficeConfigSave input').serialize() 
+0

Я должен следить за серией Json – Sandy

+0

@Sandy обновил мой ответ – Ovidiu

+0

'Список KCCM_Brands''' '' '' '' '' ' – Sandy

Смежные вопросы