2015-08-17 2 views
0

У меня есть модель, как показано нижеотправлять обратно значение флажка в MVC

public class security 
    { 
    public long id { get; set; } 
    public long user_id { get; set; } 
    public long submenu_id { get; set; } 
    public long module_id { get; set; } 
    public long flag { get; set; } 
    public string module { get; set; } 
    public string submenu { get; set; } 
    } 

, в котором flag будет 1, если пользователь имеет доступ к этому меню еще 0

Я могу показать это в вид с помощью pagedlist

@foreach (var item in Model) 
{ 
<tr class=""> 
<td> 
@if (item.flag == 1) 
{ 
<input type="checkbox" name="flags[]" checked="checked" id="@item.id" value="1" /> 
} 
else 
{ 
<input type="checkbox" name="flags[]" id="@item.id" value="0" /> 
} 
</td> 
<td>@Html.DisplayFor(modelItem => item.module) </td> 
<td> @Html.DisplayFor(modelItem => item.submenu)</td> 
</tr> 
} 

это даст выход ниже

security

Здесь пользователь имеет доступ к 5 меню и доступа к 1 Теперь администратор может изменить привилегии проверки и убрав галочки.

Мой пост ActionResult подпись ниже

public ActionResult security(client_module_security c1,string[] flags) 
     { 

     } 

, но это не размещение обратно значения здесь и строка флаг содержат только проверенные номера. Снимок экрана ниже

module flags

Пожалуйста, поправьте меня, если моя логика плохо. Какие изменения необходимо внести для обновления?

+0

Потому что вы даете каждому флажку значение '1' или '0'. Измените его на 'value =" @ item.id ", а затем вы получите идентификаторы отмеченных флажков –

+0

И если вы хотите опубликовать обратные значения для' security', тогда вам нужно сгенерировать элементы управления формой для свойств ' security' –

+0

@StephenMuecke ok got it..value = "@ item.id" предоставит весь идентификатор, который был проверен. Так что он может быть обновлен как 1, а не в массиве, может быть обновлен как 0..thanks .. опубликуйте его как ответ .. я отметю его .. – Sachu

ответ

3

Модель:

public class security 
{ 
    public long id { get; set; } 
    public long user_id { get; set; } 
    public long submenu_id { get; set; } 
    public long module_id { get; set; } 
    public bool flag { get; set; } 
    public string module { get; set; } 
    public string submenu { get; set; } 
} 

Вид:

@for(var i = 0; i<Model.Count; i++) 
{ 
    @Html.HiddenFor(m=>m[i].id) 
    <tr class="">  
    <td>  
     @Html.CheckBoxFor(m=>m[i].flag) 
    </td> 
    <td>@Html.DisplayFor(modelItem => modelItem[i].module) </td> 
    <td> @Html.DisplayFor(modelItem => modelItem[i].submenu)</td> 
    </tr> 
} 

Контроллер

public ActionResult security(IList<security> model) 
     { 
       //each one of the items in your model will have Id an flag property filled with data 
     } 
+0

спасибо за помощь .. – Sachu

3

Значения всех флажков либо 0 или 1, потому что вы установите их с помощью <input .. value="1" /> или <input .. value="0" /> (и поскольку он y checked checkboxes post back, ваши значения в контроллере всегда равны 1). Вместо этого установите атрибут value в id пункта

<input type="checkbox" name="flags[]" checked="checked" value ="@item.id" /> 

Параметр string[] flags теперь будет содержать массив идентификаторам всех отмеченных элементов.

+0

спасибо за ответ, я его поддержал .. ответ от Alex тоже подходит для меня .. спасибо за помощь – Sachu

+0

Всегда лучше использовать view model, представляющую именно то, что вы хотите отобразить/отредактировать :) –

+0

так что ниже ответ больше gud? – Sachu

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