MvcContrib.Grid отображает дополнительный скрытый ввод в столбце - PullRequest
1 голос
/ 13 марта 2012

В следующем сокращенном cshtml-фрагменте я использую 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 ]

2 голосов
/ 13 марта 2012

Помощники 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)
{
    ...
}

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

0 голосов
/ 13 марта 2012

Итак, пока я решил это следующим образом:

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

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

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

...