有没有办法更改cshtml中变量的范围?

时间:2019-08-14 12:16:13

标签: c# asp.net-core

在创建动态页面时,我尝试访问两个由foreach循环修改的变量。即使我在外部声明变量,该变量也会在循环后变为未分配

我知道我应该找到一种建立 sql联接的方法,但是,每当我尝试在循环之前访问变量时,都会一直发生此问题。我搜索了一种方法来阻止垃圾收集器完全删除该变量,但是我需要一种更简洁的方法来实现此目的。

@foreach (var item in db.Horraire)
{
    String Employe;
    String color;
        foreach (var search in db.Employé)
        {
            if (search.id == item.EmployeID) { Employe = search.naming; break; }
        }
        foreach (var search in db.Tâche)
        {
            if (search.id == item.EmployeID) { color = search.coloring; break; }
        }
//Turning worked hour into size of occupied red square on a calendar, it's working properly
    TimeSpan substract = item.fin.Subtract(item.début);
    float phours = substract.Hours * 70; phours = phours + substract.Minutes * (60/70);
    String pheight = ""+phours+"px";
    float thours = item.début.Subtract(new DateTime()).Hours + item.début.Subtract(new DateTime()).Minutes/60 - 8; thours = thours * 70 + 110;
    String theight = ""+thours+"px";
    int lday = item.Jour * 200 + 200;
    String ljour = "" + lday + "px";
<div class="redsquare" style="
    position: absolute; width:200px; height:@pheight;
    top:@theight;
    left:@ljour;
    font-size: 0.8em;
    text-align: right;
    color: @color;"> //missing local variable
    @Employe //missing local variable
</div>
}

两个变量都将变为错误“使用未分配的局部变量” ,而不仅仅是将变量注入到html中。如何修复联合,变量的作用域或垃圾回收?

2 个答案:

答案 0 :(得分:0)

感谢我根本不知道的LINQ语言的答案和方向。这是避免示波器混乱的新行

r = requests.get(projectsExportURL, auth=(username, password), verify=False,stream=True)
r.raw.decode_content = True

#add snapshot date column
df = pd.read_excel(r.raw,sheet_name='Tasks',Headers=0)

答案 1 :(得分:0)

这与“垃圾回收器完全删除变量”无关,也与变量的范围无关。

虽然可以肯定foreach()肯定会分配变量,但C#编译器却没有。当然是这样。

因此,您需要为它们分配合理的默认值:

String Employe = "";
String color = "";

但是您的代码还有更多问题。您的答案中的解决方案:

@db.Tache.FirstOrDefault(x => x.id == item.EmployeID).coloring;
@db.Employe.FirstOrDefault(x => x.id == item.EmployeID).naming;

NullReferenceException返回FirstOrDefault()时,将抛出null。因此,您必须添加一个空检查,或直接调用First()。反之,当数据库中没有匹配的记录时,将抛出该异常。

解决方案的确是在查询时联接表:

@foreach (var item in db.Horraire.Include(h => h.Employé).Include(h => h.Tâche))
{
    // ...

    <div style="color: @item.Tâche.coloring">@item.Employé.naming</div>
}

但是您实际上不应该在视图中运行查询,您应该在控制器中执行此操作并填充视图模型。