【问题标题】:MVC 3 Webgrid - how do you hide columns you do not want to be visible?MVC 3 Webgrid - 如何隐藏不想显示的列?
【发布时间】:2011-11-02 14:22:30
【问题描述】:

我有一个 webgrid,我希望有一列只对某些用户可见。 目前我已将网格编码如下

if (Context.User.IsInRole(Role.Inputter) || Context.User.IsInRole(Role.Administrator))
{
    @grid.GetHtml(columns: grid.Columns(
        grid.Column(format: (item) => Html.ActionLink("Select", "Details", new { contractId = item.ContractId })),
        grid.Column(format: (item) => Html.ActionLink("Edit", "Edit", new { contractId = item.ContractId })),
        grid.Column("SignOffDate", "Sign Off Date",
            format: @<text> <span>@item.SignOffDate.ToString("d/M/yyyy")</span></text>),
        grid.Column("FullContractNumber", "Contract Number"),
        grid.Column("ContractTitle", "Title")
    ));
}
else
{ 
    @grid.GetHtml(columns: grid.Columns(
        grid.Column(format: (item) => Html.ActionLink("Select", "Details", new { contractId = item.ContractId })),
        grid.Column("SignOffDate", "Sign Off Date",
            format: @<text> <span>@item.SignOffDate.ToString("d/M/yyyy")</span></text>),
        grid.Column("FullContractNumber", "Contract Number"),
        grid.Column("ContractTitle", "Title")
    ));
}

但肯定有更好的方法而不重复所有代码吗? 2 列输入之间的唯一区别是我想为特定用户显示编辑链接。那么最好的替代方法是什么?

【问题讨论】:

    标签: asp.net-mvc razor show-hide webgrid


    【解决方案1】:

    试试这样(未经测试,暂时无法访问VS):

    @{
        var gridColumns = new List<WebGridColumn>();
        gridColumns.Add(grid.Column(format: (item) => Html.ActionLink("Select", "Details", new { contractId = item.ContractId })));
        if (Context.User.IsInRole(Role.Inputter) || Context.User.IsInRole(Role.Administrator))
        {
            gridColumns.Add(grid.Column(format: (item) => Html.ActionLink("Edit", "Edit", new { contractId = item.ContractId })));
        }
        gridColumns.Add(grid.Column("SignOffDate", "Sign Off Date", format: @<text> <span>@item.SignOffDate.ToString("d/M/yyyy")</span></text>));
        gridColumns.Add(grid.Column("FullContractNumber", "Contract Number"));
        gridColumns.Add(grid.Column("ContractTitle", "Title"));
    }
    
    @grid.GetHtml(columns: grid.Columns(gridColumns.ToArray()));
    

    【讨论】:

    • 哇...伟大的解决方案达林。按预期工作。
    【解决方案2】:

    不确定是否可以通过使用“columnNames”参数使我变得更简单。我想显示“CustomerCode”列,因此只需将“CustomerCode”排除在外。

    WebGrid obj = new WebGrid(Custs,columnNames: new[] { "CustomerCode"});
    

    取自

    http://www.codeproject.com/Articles/843788/WebGrid-in-ASP-NET-MVC-important-tips#Tip3:-DisplayNecessaryColumnsMVCWebGrid

    【讨论】:

      【解决方案3】:
      grid.Column("FriendlyId", style:"hidecol",header:"")
      

      您应该像下面这样使用它,而不是像这样使用它。我试过了,会成功的。

      grid.Column(format: @<input type="hidden" name="FriendlyId" value="@item.FriendlyId" />)
      

      【讨论】:

        猜你喜欢
        • 2016-11-26
        • 1970-01-01
        • 2013-10-15
        • 2016-04-04
        • 1970-01-01
        • 2011-11-13
        • 2013-06-28
        • 1970-01-01
        • 2013-11-28
        相关资源
        最近更新 更多