2012-03-13 3 views
1

В следующей усеченном cshtml выдержке я использую сетку для построения таблицы:MvcContrib.Grid оказывает дополнительный скрытый вход в колонке

@using (Html.BeginForm("DeleteSelected", "ControllerName", FormMethod.Post)) 
{ 
    @Html.Grid(Model).Columns(column => { 
     column 
      .For(x => x.CreationTime).Format("{0:g}"); 
     column 
      .For(x => x.OtherPropery); 
     column 
      .For(x => x.YetAnotherProperty); 
     column 
      .For(x => Html.CheckBox(x.IdThatICanUseToGrabModels, new {@class = "isSelectedCheck"})) 
      .Header(@<div><input type="checkbox" id="isSelectedHeader"/></div>); 
    }); 

Когда я представить мою сетку с помощью формы POST, я хотел бы быть чтобы определить, какие строки были выбраны, и действовать соответственно в моей логике контроллера. Последний оператор column.For(...) создает ввод флажка и скрытый ввод.

Видимо, это ожидаемое поведение. Поскольку два входа получают одно и то же имя, как можно ожидать, что цикл будет проходить через объект FormCollection и выберет правильные значения? Каждый ключ (с именем x.IdThatICanUseToGrabModels) может содержать более одного значения.

Как проходят другие люди?

спасибо,

Брайен

ответ

2

Помощники CheckBox/CheckBoxFor предназначены для использования с логическими свойствами на вашей модели представления. Итак:

public class MyViewModel 
{ 
    public DateTime CreationTime { get; set; } 
    public string OtherProperty { get; set; } 
    public string YetAnotherProperty { get; set; } 
    public bool IdThatICanUseToGrabModels { get; set; } 
} 

, а затем:

@Html.Grid(Model).Columns(column => 
{ 
    column.For(x => x.CreationTime).Format("{0:g}"); 
    column.For(x => x.OtherProperty); 
    column.For(x => x.YetAnotherProperty); 
    column 
     .Custom(@<text>@Html.CheckBox("values", item.IdThatICanUseToGrabModels)</text>) 
     .Header(@<div><input type="checkbox" id="isSelectedHeader"/></div>); 
}) 

и, наконец:

[HttpPost] 
public ActionResult DeleteSelected(bool[] values) 
{ 
    ... 
} 

Вы также мог бы иметь скрытый идентификатор, соответствующий логическое значение (вы будете иметь пару, состоящую из id и логическое свойство, которое позволит вам в действии контроллера узнать, какой идентификатор выбран).

+0

Это выглядит намного лучше, чем мое решение, но я смущен вашей собственностью 'IdThatICanUseToGrabModels'. Должно ли это быть 'int' с отдельным свойством' bool IsSelected' или я что-то неправильно понимаю? –

0

Так вот я решил так:

column 
    .For(x => Html.Raw("<input name="+x.AMPExamNumber.ToString()+" type=\"checkbox\" />")) 
    .Header(@<div><input type="checkbox" id="isSelectedHeader"/></div>); 

я могу затем захватить пары ключ-значение вне FormCollection объекта использовать их, чтобы выбрать мои объекты из БД.

Это кажется ужасным. Если у кого-то есть лучшее решение, пожалуйста, отправьте сообщение, чтобы мне не пришлось указывать это как решение ...

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