MVC3 WebGrid CheckBox

时间:2012-04-24 13:31:33

标签: asp.net-mvc-3 checkbox webgrid

我正在尝试在网格上的列中添加一个复选框,而我发现很难使用Html.CheckBox来渲染它。如果我使用input type =“checkbox”它会渲染,但我似乎无法在视图模型中保存该值。

我有一个相当复杂的视图,它有两个webGrids,你选择一个项目移动到另一个,当移动到grid1时,你可以根据需要检查每个行的一个框。一切正常,除了我无法获得要保存的复选框的值。

具有复选框的网格代码如下所示:

var grid1 = new WebGrid(source: Model.FieldsInTemplate, canSort: false, defaultSort:"FieldName");

    @grid1.GetHtml(headerStyle:"gridGroupRow", tableStyle: "gridGroup", rowStyle: "gridRow", alternatingRowStyle: "gridRowAlt", columns: grid1.Columns(
        grid1.Column("FieldName", "Field Name"),
        grid1.Column(header: "Required", format: @<text><input name="IsRequired" type="checkbox" value="@item.IsRequired" /></text>),
        grid1.Column(format: (item) => new HtmlString("<a href='#' id='test' onclick='updateTemplate(false," + item.FieldId.ToString() + ");'>Remove</a>"))
             ))

因此,使用上面的内容,网格呈现一个复选框,但在提交时,实体始终为false。该视图使用viewModel:

public class TemplateFieldInteractViewModel
{
    public IList<MetadataTemplateFieldInstanceDisplayViewModel> FieldsInTemplate
    {
        get;
        set;
    }

    public IList<MetadataTemplateFieldInstanceDisplayViewModel> FieldsNotInTemplate
    {
        get;
        set;
    }
}

MetadataTemplateFieldInstanceDisplayViewModel如下所示:

public class MetadataTemplateFieldInstanceDisplayViewModel
{
    public int FieldId {get;set;}

    public string FieldName {get;set;}

    public bool IsRequired {get;set;}
}

如果这有点模糊,请告诉我,我是新来的,不要因为太多不必要的代码而超负荷。

干杯

马克

3 个答案:

答案 0 :(得分:4)

复选框的值不会确定它是否“已选中”。您需要使用checked =“checked”。

我不是100%用Razor学习,但这是一次尝试:

<input name="IsRequired" type="checkbox" @if(item.IsRequired) { <text>checked="checked"</text>} value="@item.IsRequired" /> 

这会解决您的问题吗?

答案 1 :(得分:1)

如果您将列声明为:

grid.Column("Select", "Select", format: @<input type="checkbox" name="selectedrows" value="@item.WedNo" />)

然后在您的操作中,表单发布到您可以访问这些选定的项目,如下所示:

public ActionResult Selections(string[] selectedrows)

此处,selectedrows将包含所有选中的复选框。

答案 2 :(得分:0)

我想出了如何以我想要的方式做到这一点:

   grid.Column("Select", header: "", format: (item) => @Html.Raw("<a href='" + item.GetSelectUrl() + "' /><img src='" + ((grid.SelectedRow == item) ? "../../Content/images/AdminSelect-ON.png" : "../../Content/images/AdminSelect-OFF.png") + "' />")),