【问题标题】:Need to compare value from other table需要比较其他表的值
【发布时间】:2017-11-05 13:00:20
【问题描述】:

我的模型中有 3 个类

型号

public class Student  
{  
public int id { get; set; }  
[Required]  
[DisplayName("Student Name")]  
public string Name { get; set; }  
[Required]  
public int RollNO { get; set; }  
public DateTime EnrollmentDate { get; set; }  
public ICollection<Record> Records { get; set; }  
}  

public class Record  
{  
public int Id { get; set; }  
public int StudentId { get; set; }  
public int SubjectId { get; set; }  
[Required]  
public int Marks { get; set; }  
public string Result { get; set; }  
public virtual Student Students { get; set; }  
public virtual Subject Subjects { get; set; }  
}  

public class Subject  
{  
public int id { get; set; }  
[Required]  
public string Title { get; set; }  
[Required]  
[DisplayName("Minimum Marks")]  
public int MinMarks { get; set; }  
[Required]  
[DisplayName("Max Marks")]  
public int MaxMarks { get; set; }  
public ICollection<Record> Records { get; set; }  
} 

在主题表中,我将创建每个主题并设置通过所需的最小和最大分数...现在在记录表(创建页面)中,我想将所选主题的最小分数与 Record.Marks 进行比较,如果它更少Record.Result 中的最小标记失败,如果大于 Record.Result 中的最大标记则通过...我还想将 Result.Marks 属性与 Subject.MaxMarks 进行比较,如果它大于 Subject.MaxMarks 用户应该以任何可能的形式出现错误...

这是我的控制器

控制器

public ActionResult Create([Bind(Include = "Id,StudentId,SubjectId,Marks,Result")] Record record,Subject subject)
{

    var selectedSubject = db.Subjects.Where(sub => subject.id == record.SubjectId).FirstOrDefault();

    if (record.Marks < selectedSubject.MinMarks)
    {
        record.Result = "Fail";
    }
    else
        record.Result = "Pass";

    if (ModelState.IsValid)
    {
        db.Records.Add(record);
        db.SaveChanges();
        return RedirectToAction("Index");
    }

    ViewBag.StudentId = new SelectList(db.Students, "id", "Name", record.StudentId);
    ViewBag.SubjectId = new SelectList(db.Subjects, "id", "Title", record.SubjectId);
    return View(record);
}

【问题讨论】:

    标签: c# asp.net asp.net-mvc


    【解决方案1】:

    假设您的视图有 input 元素来选择/输入主题 ID,并且元素的 name 属性值为 SubjectId 并且它在 form

    只需添加一个 else if 来检查最大标记。您的操作方法中不需要第二个参数。只需将其删除。

    var selectedSubject = db.Subjects.FirstOrDefault(a=> a.id == record.SubjectId);
    if(selectedSubject!=null)
    {     
    
      if (record.Marks < selectedSubject.MinMarks)
      {
        record.Result = "Fail";
      }
      else if (record.Marks > selectedSubject.MaxMarks)
      {
        record.Result = "Error";
      }
      else
      {
        record.Result = "Pass";
      }
    }
    else
    {
      ModelState.AddModeError(string.empty,"Subject not found");
    }
    //to do : Reload dropdown data and return the view
    

    【讨论】:

    • 它不能那样工作......我在 selectedsubject.minmarks 处得到空值
    • 您确定record.SubjectId 中的subjectId 值正确吗?
    • 查看更新后的答案。当您的 record.SubjectId 具有正确的值时,这将为您提供主题 var selectedSubject = db.Subjects.FirstOrDefault(a=&gt; a.id == record.SubjectId);。如果 record.SubjectId 不是有效的主题 ID,则意味着您没有从视图(表单)发送它。在您的操作方法中放置一个断点并首先检查此值。
    • 您获取所选主题的 LINQ 查询错误。使用我有问题的那个。你也不需要第二个参数,Subject subject
    • 谢谢...我在 selectedsubject 中获得了价值...但现在我无法插入任何数据在单击创建后不会重定向到索引...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-08-05
    • 2021-05-09
    • 1970-01-01
    • 1970-01-01
    • 2017-03-24
    • 2019-08-27
    • 1970-01-01
    相关资源
    最近更新 更多