【问题标题】:Is it possible to concatenate in the middle of a view bags property in asp.net core?是否可以在asp.net核心的视图包属性中间连接?
【发布时间】:2019-07-12 19:51:01
【问题描述】:

我正在用 asp.net 核心重建一个旧的 vb/web 表单应用程序。我有 5 列,一周中的每一天。 Shift_Monday_TargetShift_Tuesday_Target 等等。所以在我看来,我有一个变量可以获取当天的数据,我想将它连接到 viewbag 中,这样它每天都会改变。以前的应用程序架构师在他们的 sql 查询中实现了这一点。

但是我正在使用 linq,并且在将语法从 sql 转换为 linq 时遇到了麻烦。所以我决定尝试通过操纵我的视图来获得想要的结果。哪种方法更好,哪种方法更可行?

这是我的尝试。

<strong style="color:white">@(ViewBag.PracticeTarget?.Shift_+"DayOfWeek"+_Target ?? "")</strong>

这是我获取星期几的变量。

var DayOfWeek = DateTime.Now.DayOfWeek.ToString();

这是我的观点。

ViewBag.PracticeTarget = db.TblShiftInfo.FirstOrDefault();

【问题讨论】:

  • 为什么不用字典?
  • 与我们分享您的旧实现和结果。您可以考虑与我们共享 sql,我们可以与您共享 linq 查询。
  • 那太好了!这是sql。 Dim strQuery As String = "选择 Shift_QA_Text 作为 'ShiftQAText',Shift_Name 作为 'NewShiftName',Shift_" + DayofWeek + "_Target 作为 'ShiftTarget' from tbl_Shift_Info where Shift_ID = @ShiftID"

标签: c# .net linq asp.net-core


【解决方案1】:

如果星期几仅在 UI 中有用,那么任何一个都可以工作。

我个人认为 Razor 语法是一种 PITA,与 C# 相比,它可以快速调试和解析。

还要注意,因为它是 Razor,所以它总是在服务器端完成。所以性能会很接近。

您还提到了每一列的星期几。在那种情况下,我会做一次“繁重”的工作,然后按索引访问计算值。可以作为绑定到网格的任何属性,也可以只是模型/视图中的另一个属性:

var culture = CultureInfo.CurrentCulture;            

// This will be Monday, Tuesday, Wednesday, Thursday, Friday
var days = Enumerable.Range((int)DayOfWeek.Monday, (int)DayOfWeek.Friday)
            .Select(s => culture.DateTimeFormat.GetDayName((DayOfWeek)s)).ToList<string>();

我假设您正在循环对象以创建表?

for(int i = 0; i <= shiftDays.Count - 1; i++)
{
    <strong style="color:white">@(ViewBag.PracticeTarget?.Shift_ + days[i] + _Target ?? "")</strong>
}

【讨论】:

  • 谢谢!我尝试了您的解决方案,但出现相同的错误“当前上下文中不存在名称 Target。”它似乎根本没有连接并将“Shift + days[i] + _Target”视为三个不同的名称。
  • 调试时,你的viewbag 那些属性吗? Shift_ 和 _Target 是奇怪的名字,也许应该是:ViewBag.PracticeTarget?.Shift + "_" + days[i] + "_" + ViewBag.PracticeTarget?.Target ? (在这一点上,我们没有足够的代码来进行有根据的猜测......
  • 我做到了!所以我意识到我必须首先在我的 linq/sql 查询中处理它。我的视图包中的属性是 Shift_Monday_Target、Shift_Tuesday_Target 等。这是我正在尝试调用的当前查询。 db.Database.OpenConnection(); var command = db.Database.GetDbConnection().CreateCommand(); command.CommandText = "选择 Shift_" + DayOfWeek + "_Target as 'ShiftTarget' from tbl_Shift_Info"; command.CommandType = CommandType.Text; ViewBag.PracticeTarget = (command.ExecuteScalar());
  • @qpc4ever 嗯,那是在数据库中作为某种类型的列吗?希望有 (fk) ?但如果这就是数据库中的情况,那么整个问题似乎无关紧要?因为您根本不必弄乱 Razor 语法
  • 这就是为什么我要问哪种方法更好。我要访问的数据库中的实际数据称为 Shift_Monday_Target。所以我想通过获取星期几,我可以将星期几连接起来并切换为正确的星期几,所以它每天都在变化。我知道我可以做一系列条件语句,但这似乎是一种混乱的方法。一定有更好的方法!看起来这个 sql 会起作用。 "Select Shift_" + DayOfWeek + "_Target as 'ShiftTarget' from tbl_Shift_Info" 因为这样我就可以调用 ViewBag.PracticeTarget.ShiftTarget,但没有运气。
猜你喜欢
  • 1970-01-01
  • 2020-04-01
  • 2016-12-07
  • 2021-08-13
  • 2011-09-09
  • 1970-01-01
  • 2019-04-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多