首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MVC-5:显示全名

MVC-5:显示全名
EN

Stack Overflow用户
提问于 2015-04-05 12:19:46
回答 2查看 1.1K关注 0票数 0

我想在视图顶部显示来自计算属性的FullName。当我查看汽车日志时,可以看到FullName属性。但是Html帮助程序中使用的lambda表达式只显示属性名称,而不显示数据。有没有办法显示日志似乎显示的可用数据?

更新:

完整视图:

代码语言:javascript
复制
@model IEnumerable<SlamJammersData.Model.Attendances>

@{
    ViewBag.Title = "Rosters";
}

<div class="container container-fluid">
    <div class="panel panel-info">
        <div class="panel-body">
            <div class="container">


                @using (Html.BeginForm("Index", "Attendances", FormMethod.Get))
                {

                    <div class="row">
                        <div class="col-md-4">
                            <p>
                                <h3>Attendances for player: @Html.DisplayNameFor(model => model.FullName) </h3>
                            </p>
                        </div>
                        <div class="col-md-4">
                            <p>
                                <h4>Attendances Recorded: @Model.Count() </h4>
                            </p>
                            </div>

                        </div>
                }

            </div>
        </div>
            </div>
        </div>

        <div class="container">
            <div class="row">
                <div class="col-md-2">
                    <p>
                        @Html.DisplayNameFor(model => model.Type)
                    </p>
                </div>

                <div class="col-md-2">
                    <p>
                        @Html.DisplayNameFor(model => model.AttendanceDate)
                    </p>
                </div>

                <div class="col-md-2">
                    <p>
                        @Html.DisplayNameFor(model => model.Comments)
                    </p>
                </div>
            </div>
           @foreach (var item in Model)
           {
               <div class="row table-striped">
                   <div class="col-md-2">
                       <p>
                           @Html.DisplayFor(modelItem => item.Type)
                       </p>
                   </div>

                   <div class="col-md-2">
                       <p>
                           @Html.DisplayFor(modelItem => item.AttendanceDate)
                       </p>
                   </div>

                   <div class="col-md-2">
                       <p>
                           @Html.DisplayFor(modelItem => item.Comments)
                       </p>
                   </div>

                   <div class="col-md-1">
                       <p>
                           <input class="btn btn-xs btn-info" type="button" value="Details" onclick=" location.href = '@Url.Action("Details", "Attendances", new {id = item.Id}, null)' "/>
                       </p>
                   </div>

                   <div class="col-md-1">
                       <p>
                           <input class="btn btn-xs btn-info" type="button" value="Edit" onclick=" location.href = '@Url.Action("Edit", "Attendances", new {id = item.Id}, null)' "/>
                       </p>
                   </div>
                   <div class="col-md-2">
                       <p>
                           <input class="btn btn-xs btn-success" type="button" value="Add New Attendance" onclick=" location.href = '@Url.Action("Create", "Attendances", new {enrollments_Attendance = item.Enrollments_Attendance}, null)' "/>
                       </p>
                   </div>
                   <div class="col-md-1">
                       <p>
                           <input class="btn btn-xs btn-danger" type="button" value="Delete" onclick=" location.href='@Url.Action("Delete", "Attendances", new {id = item.Id}, null)' " />
                       </p>
                   </div>
               </div>


           }

        </div>

控制器:

代码语言:javascript
复制
public ActionResult Index(int? Id )
{
    //Get the rosters and their attendance records
    IQueryable<Attendances> attendances = db.Attendances
        .Where(a => a.Enrollments_Attendance == Id)
        .Include(e => e.Enrollments.Individuals)
        .OrderByDescending(a => a.AttendanceDate);

    ViewBag.EnrollmentId = Id;

    var sql = attendances.ToString();
    return View(attendances.ToList());
} 

模型:

代码语言:javascript
复制
namespace SlamJammersData.Model
{
    public class Attendances
    {
        public int Id { get; set; }

        [Required]
        [StringLength(15)]
        public string Type { get; set; }

        [DataType(DataType.Date)]
        [DisplayFormat(DataFormatString = "{0:MM-dd-yyyy}", ApplyFormatInEditMode = true)]
        public DateTime AttendanceDate { get; set; }

        [StringLength(255)]
        public string Comments { get; set; }

        [Display(Name="Enrollments")]
        public int Enrollments_Attendance { get; set; }

        public virtual Enrollments Enrollments { get; set; }

        [NotMapped]
        public string FullName
        {
            get
            {
                var player = Enrollments.Individuals.FirstName + " " + Enrollments.Individuals.LastName;
                return player;
            }
        }
    }
}

我不确定它是否是IEnumerable,但是下面是调试器中显示的内容:Screenshot of debugger's Auto log

EN

回答 2

Stack Overflow用户

发布于 2015-04-05 12:32:40

因为您的模型是IEnumerable<SlamJammersData.Model.Attendances>,而FullNameAttendances的属性,所以您不能像您正在尝试做的那样在foreach块之外使用FullName属性。但是,假设FullName的值始终相同,则可以使用ViewBag。如下所示更改您的控制器方法

代码语言:javascript
复制
public ActionResult Index(int? Id )
{
    //Get the rosters and their attendance records
    IQueryable<Attendances> attendances = db.Attendances
        .Where(a => a.Enrollments_Attendance == Id)
        .Include(e => e.Enrollments.Individuals)
        .OrderByDescending(a => a.AttendanceDate);

    ViewBag.EnrollmentId = Id;
    ViewBag.FullName = ...; // logic to get FullName here

    var sql = attendances.ToString();
    return View(attendances.ToList());
}

并在视图中显示全名,如下所示

代码语言:javascript
复制
@using (Html.BeginForm("Index", "Attendances", FormMethod.Get)) 
{
    <div class="row">
        <div class="col-md-4">
            <p>
                <h3>Attendances for player: @ViewBag.FullName </h3>
            </p>
        </div>
        <div class="col-md-4">
            <p>
                <h4>Attendances Recorded: @Model.Count() </h4>
            </p>
            </div>

        </div>
} 
票数 1
EN

Stack Overflow用户

发布于 2015-04-09 02:40:05

在这个话题上,我得到了ASP.NET论坛的帮助。所需的辅助代码行为:

代码语言:javascript
复制
<h3>Attendances for player: @Html.DisplayName(Model.First().FullName) </h3>

感谢所有看过这个问题的人。

更新:我找到了不同的代码行,而且看起来更安全一些。

代码语言:javascript
复制
@Html.DisplayFor(m => m.ElementAt(0).FullName)

更新:我发现正如Marko评论的那样,如果记录计数为0,就会抛出一个异常。因此,我做了一个工作,在控制器中使用try-catch,以便在没有记录可显示的情况下显示更友好的消息。

代码语言:javascript
复制
        public ActionResult Index(int? Id)
    {

        //Get the rosters and their attendance records
                    IQueryable<Attendances> attendances = db.Attendances
                        .Where(a => a.Enrollments_Attendance == Id)
                        .Include(e => e.Enrollments.Individuals)
                        .OrderByDescending(a => a.AttendanceDate);

                    ViewBag.EnrollmentId = Id;
        try
        {
            ViewBag.FullName = attendances.First().FullName;

        }
        catch (InvalidOperationException ex)
        {
            ViewBag.Exception = ex;
           ViewBag.FullName = "No Attendances to display for the selected player";
        }

        return View(attendances.ToList());

    } 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29454025

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档