【问题标题】:How do I return just one element from the model如何从模型中只返回一个元素
【发布时间】:2016-09-01 08:22:20
【问题描述】:

我有:

   @model IEnumerable<SharpTrivia.Controllers.Questions>
   @foreach (var item in Model) {
<tr>
    <td>
        @Html.DisplayFor(modelItem => item.question)
    </td>

它可以很好地返回所有问题 如何只退回一件商品?说 item.id ==1 的那个?

我无法让建议的解决方案发挥作用,这可能是因为我不清楚我使用的是哪种模型。我更新了我的问题以提供更多详细信息。

型号:

   namespace SharpTrivia.Controllers
{
    using System;
    using System.Data.Entity;
    using System.ComponentModel.DataAnnotations.Schema;
    using System.Linq;

    public partial class TriviaModel : DbContext
    {
        public TriviaModel()
            : base("name=TriviaM")
        {
        }

        public virtual DbSet<Questions> Questions { get; set; }
        public virtual DbSet<Answer> Answer { get; set; }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Entity<Questions>()
                .Property(e => e.question)
                .IsUnicode(false);

            modelBuilder.Entity<Questions>()
                .Property(e => e.coranswer)
                .IsUnicode(false);

            modelBuilder.Entity<Answer>()
                .Property(e => e.answera)
                .IsUnicode(false);

            modelBuilder.Entity<Answer>()
                .Property(e => e.answerb)
                .IsUnicode(false);

            modelBuilder.Entity<Answer>()
                .Property(e => e.answerc)
                .IsUnicode(false);

            modelBuilder.Entity<Answer>()
                .Property(e => e.answerd)
                .IsUnicode(false);
        }
    }
    }




   namespace SharpTrivia.Controllers
{
    using System;
    using System.Collections.Generic;
    using System.ComponentModel.DataAnnotations;
    using System.ComponentModel.DataAnnotations.Schema;
    using System.Data.Entity.Spatial;

    public partial class Questions
    {
        public int id { get; set; }

        [Required]
        [StringLength(500)]
        public string question { get; set; }

        [Required]
        [StringLength(50)]
        public string coranswer { get; set; }
    }
}

【问题讨论】:

  • @Html.DisplayFor(i =&gt; Model.FirstOrDefault(m =&gt; m.Id == 1))。而且它与ASP.NET MVC无关,它与Linq有关。

标签: c# asp.net-mvc


【解决方案1】:

如果你知道只有一个元素,那么使用

@Html.DisplayFor(i => Model.Single(m => m.Id == 1).question)

否则你应该使用

var item = Model.FirstOrDefault(m => m.Id == 1); 

并检查项目是否不为空

@if (item != null)
{
    @Html.DisplayFor(i => item.question)
}

【讨论】:

  • 我得到 operator == 不能应用于方法组和 int 类型的操作数
  • @PatrikGustafsson 请您发布(至少是相关部分)您的模型吗? :)
  • @PatrikGustafsson 不是上下文 - Questions 的模型 - POCO 类。你的public class Questions{}
  • 我想我现在添加了模型:)
  • 谢谢,解决了它。(和一个 ; 在表达式之后)
【解决方案2】:

不推荐只对一项使用foreach。 您可以使用 Break 循环一次,如下所示:

@foreach (var item in Model)
{
    //Your code block
    break;
}

【讨论】:

  • 这不符合他对where item.id ==1的要求
  • 我在提到 item.Id==1 的 OP 问题中找不到任何要求,这只是获取一条记录的示例
  • 它可以很好地返回所有问题我如何只返回一个项目?说 item.id ==1 的那个? 他想检查一个属性,而不仅仅是第一个项目。如果是这样,你的 foreach 循环真的是不必要的
猜你喜欢
  • 2023-02-11
  • 2021-11-05
  • 1970-01-01
  • 1970-01-01
  • 2016-10-21
  • 2016-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多