C# asp.net mvc 3 razor & html table

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/10499138/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-09 14:05:20  来源:igfitidea点击:

asp.net mvc 3 razor & html table

c#htmlcssasp.net-mvcrazor

提问by Irakli Lekishvili

I have UsersClass wich never be more then 10 items. How i can display user class with table in view something like this?

我的 UsersClass 永远不会超过 10 个项目。我如何在视图中显示带有表格的用户类?

I want to show two rows with 10 cells

我想显示两行 10 个单元格

采纳答案by Darin Dimitrov

As always and in every ASP.NET MVC application I recommend using a view model which is adapted to the requirements of the view. So in this view you mentioned a table in which you want to group those users by 5 elements per row:

一如既往,在每个 ASP.NET MVC 应用程序中,我建议使用适合视图要求的视图模型。因此,在此视图中,您提到了一个表,您希望在其中按每行 5 个元素对这些用户进行分组:

public class MyViewModel
{
    public int Key { get; set; }
    public IEnumerable<UsersClass> Users { get; set; }
}

and then in the controller action:

然后在控制器动作中:

public ActionResult Index()
{
    // that's your domain model => a list of UsersClass
    // could be coming from wherever you want
    var users = Enumerable.Range(1, 7).Select(x => new UsersClass
    {
        Id = x
    });

    // Now let's group those users into the view model:
    // We will have 5 elements per row
    var model = users
        .Select((u, index) => new { User = u, Index = index })
        .GroupBy(x => x.Index / 5)
        .Select(x => new MyViewModel
        {
            Key = x.Key,
            Users = x.Select(y => y.User)
        });
    return View(model);
}

and finally the strongly typed view is pretty trivial:

最后,强类型视图非常简单:

@model IEnumerable<MyViewModel>
<table>
    @foreach (var item in Model)
    {
        <tr>
            @foreach (var user in item.Users)
            {
                <td>@user.Id</td>
            }

            <!-- That's just to fill the row with the remaining
                 td if we have less than 5 users. Obviously
                 depending on your requirements you could use
                 a single td with a calculated colspan or something else
            -->
            @for (int i = item.Users.Count(); i < 5; i++)
            {
                <td></td>
            }
        </tr>
    }
</table>

Obviously this view could be simplified even further using display templates:

显然,使用显示模板可以进一步简化此视图:

@model IEnumerable<MyViewModel>
<table>
    @Html.DisplayForModel()
</table>

and in the corresponding display template:

并在相应的显示模板中:

@model MyViewModel
<tr>
    @Html.DisplayFor(x => x.Users)
    @for (int i = item.Users.Count(); i < 5; i++)
    {
        <td></td>
    }
</tr>

and the UsersClass display template:

和 UsersClass 显示模板:

@model UsersClass
<td>@user.Id</td>

and the result:

结果:

enter image description here

在此处输入图片说明

回答by Eric Garrison

Not sure if this is exactly what you're looking for, but if it's not exact, you should be able to modify it easily:

不确定这是否正是您要查找的内容,但如果不准确,您应该能够轻松修改它:

@* Check to make sure your user class is not null *@
@if (Model.UserClass != null)
{
    <table>
    for (int i = 1; i <= 2; i++)
    {
        <tr>
        for (int j = 1; j <= 5; j++)
        {
            <td>if (Model.UserClass[(j*i)-1] != null) { Model.UserClass[(j*i)-1] }</td>
        }
        </tr>
    }
    </table>
}

I wrote this pretty quickly, but this should be close to what you need.

我写得很快,但这应该接近你所需要的。