2015-11-04 2 views
-1

Как я могу получить выбранный флажок в контроллере.Извлечь выделенные флажки в массиве в контроллер

Это основной вид, где пользователь может выбрать доступ к запросу.

@using (Html.BeginForm("addBatch_CARF", "CARF", FormMethod.Post, new { @name = "register" })) 
{ 
    @Html.ValidationSummary(true) 
    <div id="formAlert" class="alert alert-danger"> 
     <a class="close">×</a> 
     <strong>Warning!</strong> Make sure all fields are filled and try again. 
    </div> 

    var catName = ""; 
    var displayCan = ""; 
    var candidates = ""; 

    for (int i = 0; i < Model.Count; i++) 
    { 
     if (catName != Model[i].request_category) 
     { 
      <li class="list-group-item list-group-item-success"> 
       @Html.DisplayFor(modelItem => Model[i].request_category) 
       <span class="pull-right" style="margin-right:60px;">Special Instructions</span> 
      </li> 
      catName = Model[i].request_category; 
      displayCan = catName; 
     } 
     if (displayCan == Model[i].request_category) 
     { 
      candidates = Model[i].request_name; 
      <div class="checkbox_request"> 
       @Html.CheckBoxFor(model => model[i].isSelected, new { @class = "is_selected" })      
       @Html.DisplayFor(model => model[i].request_name) 
       @if(Model[i].request_name == "Folder Access") 
       { 
        <span class="label label-danger">Pls specify all the drive path. Note: For accessing of drives outside PETC please proceed to Online CARF</span> 
       } 
       <span class="pull-right"> 
        @Html.EditorFor(model => model[i].special_instruction) 
       </span> 
       @Html.HiddenFor(model => model[i].request_type_id) 
       @Html.HiddenFor(model => model[i].system_roles_id) 
      </div> 
     }      
    } 
    <li class="list-group-item list-group-item-success"> 
     Access to: 
    </li>     
    <div id="employeeAdd"> 
     @{Html.RenderAction("AddRequestor"); } 
    </div>     
    <p class="request_btn"> 
     <button type="submit" class="btn btn-primary" id="addbtn">Save</button> 
    </p> 
} 

Я только оказал этот вид AddRequestor в выборе или добавлении работника.

<table class="table table-hover"> 
    @for (int i = 0; i < Model.Count; i++){ 
      <tr> 
       <th> 
        @Html.CheckBox("checkbox", new { @class = "is_selected" }) 
        @Html.DisplayFor(model => model[i].FullName) 
        @Html.HiddenFor(model => model[i].Emp_Badge_No) 
       </th> 
      </tr>  

    } 
</table> 

Основная цель этого - все выбранные сотрудники должны иметь также весь доступ к выбранному запросу.

[HttpPost] 
public ActionResult addBatch_CARF(List<Request_Type> list, List<Employees_All_vw> emp, string[] checkboxes) 
{ 
    foreach (var x in emp) 
    { 
     int num = 1; 
     bool z = Convert.ToBoolean(num); 
     if (x.checkbox == z) 
     { 
      //add data into CARF table 
      CARF carf = new CARF(); 
      carf.requestor = x.Emp_Badge_No; 
      carf.carf_type = "BATCH CARF"; 
      carf.created_by = @User.Identity.Name.Remove(0, 9).ToLower(); 
      carf.created_date = System.DateTime.Now; 
      carf.active_flag = true; 
      db.CARves.Add(carf); 
      db.SaveChanges(); 
      int id = carf.carf_id; 
      //add data into Request Access Table 
      foreach (var i in list) 
      { 
       int val = 1; 
       bool y = Convert.ToBoolean(val); 
       if (i.isSelected == y) 
       { 
        Request_Access ra = new Request_Access(); 
        ra.request_access_id = 1; 
        ra.carf_id = id; 
        ra.request_type_id = i.request_type_id; 
        ra.special_instruction = i.special_instruction; 
        ra.ra_assignee = i.system_roles_id; 
        ra.dept_approval = null; 
        ra.dept_approval_date = null; 
        ra.dept_remarks = null; 
        ra.final_approval = null; 
        ra.final_approval_date = null; 
        ra.final_remarks = null; 
        ra.acknowledge_by = null; 
        ra.acknowledge_date = null; 
        ra.journal = null; 
        ra.closed_by = null; 
        ra.closed_date = null; 
        ra.verified_by = null; 
        ra.verified_date = null; 
        db.Request_Access.Add(ra); 
       } 
      } 
      db.SaveChanges(); 
     } 
     TempData["MessageAlert"] = "Successfully created!"; 
     return RedirectToAction("Batch_CARF"); 
    } 
} 

Я получил ошибку на этой линии if (x.checkbox == z)

оператора '==' не может быть применен к операндам типа 'строка []' и 'BOOL'

+1

'@ Html.CheckBox (" checkbox ", ..)' генерирует несколько флажков с помощью флажка 'name =", которые затем отправляются обратно в 'string [] checkboxes'. Вы вводите код в заблуждение, но параметр должен содержать набор строк: «True» или «False», который вам сначала нужно преобразовать в 'bool', или лучше просто сделать параметр' bool [] checkboxes' –

+1

Однако ничто из этого не будет работать правильно. '@ Html.CheckBox()' генерирует 2 входа, флажок 'type =" '' с 'value =" true "' и 'type =" hidden "' со значением = "false" ', поэтому, если его проверили, оба 'true' и' false', и если его непроверено, то отправляется только 'false'. Невозможно, чтобы вы могли сопоставить, какие значения принадлежат тому элементу –

+0

Итак, как я буду делать это правильно? Что мне следует добавить в '@ Html.ChecckBox()'? – Jen143Me

ответ

1

Ваш параметр string[] checkboxes содержит значения типа string (либо "True", либо "False"), поэтому вам необходимо будет использовать метод Convert.ToBoolean() перед сравнением if (x.checkbox == z). Однако это не будет работать, так как @Html.CheckBox("checkbox", ..) генерирует 2 входа type="checkbox" с value="True" и type="hidden" с value="False" так, если его проверили, как true и false пост обратно, и если его не остановить, то только false размещена. Невозможно сопоставить какие значения с каким сотрудником.

Вместо создать модель представления для представления отбора сотрудников

public class EmployeeVM 
{ 
    public string BadgeNumber { get; set; } 
    public string Name { get; set; } 
    public bool IsSelected { get; set; } 
} 

А потом в методе AddRequestor() (предполагается, что у вас есть в Employees таблице)

public ActionResult AddRequestor() 
{ 
    List<EmployeeVM> model = db.Employees.Where(e => e.active_flag).Select(e => new EmployeeVM 
    { 
    BadgeNumber = e.Emp_Badge_No, 
    Name = e.FullName 
    }.ToList(); 
    return PartialView(model); 
} 

и в представлении

@model List<EmployeeVM> 
@for (int i = 0; i < Model.Count; i++) 
{ 
    @Html.HiddenFor(m => m[i].BadgeNumber) 
    <label> 
    @Html.CheckboxFor(m => m[i].IsSelected) 
    <span>@Html.DisplayFor(m => m[i].Name)</span> 
    </label> 
} 

И, наконец, в методе POST

[HttpPost] 
public ActionResult addBatch_CARF(List<Request_Type> list, List<EmployeesVM> employees) 
{ 
    // To get the selected employees 
    IEnumerable<string> selectedEmployees = employees.Where(e => e.IsSelected); 
    foreach(EmployeesVM employee in selectedEmployees) 
    { 
    .... 
    carf.requestor = employee.BadgeNumber; 
    .... 
+0

Хорошо, спасибо за это @Stephen. У меня есть один вопрос: как я буду отображать сотрудника или данные каждый раз, когда пользователь установит флажок? И не нужно что-то представлять, каждый раз, когда пользователь проверяет флажок, он будет отображаться. – Jen143Me

+0

Не уверен, что я понимаю? Какие данные вам нужно отображать каждый раз, когда вы устанавливаете флажок? –

+0

Да, сэр. Могу ли я отображать данные? – Jen143Me