【问题标题】:ASP.NET Web pages form query validation (razor)ASP.NET 网页表单查询验证(剃刀)
【发布时间】:2020-03-24 22:11:32
【问题描述】:

我至少有几天(我认为)无法处理一个非常典型的问题。我还是一个新手,这就是我寻求帮助的原因。

我有一个 SQL Server 数据库,其中有每 4 小时更新一次的表。在该表的下一次更新中,某些行或整个委员会名称有 50% 的可能性不会出现。

我在页面上获取的数据如下所示,并在母版页上作为助手调用:

@helper drawSummaryTable(String option, String tableType)
{
    var db = Database.Open("CommissionsDB");

    var query = "SELECT * FROM SiempelBizRepTabNew";
    var generateData = db.Query(query);
    query = @"SELECT 
                 COUNT(Commission_Name),
                 SUM(Consumption) as Consumption, 
                 SUM(Obligo) as Obligo, 
                 SUM(ActualCosts) as ActualCosts,
                 SUM(Summary) as Summary
             FROM SiempelBizRepTabNew
             WHERE Commission_Name LIKE @0";

    var ComName = "%" + Request["ComName"] + "%";

    var data = db.Query(query, ComName);

    var grid = new WebGrid(data, ajaxUpdateContainerId: "grid", canPage: false, canSort: false);

 <h1>BestellObligo</h1>

    <form method="post">
        <div id="gridContainer">
            <div id="grid" style="width: 100%; height: 150px;">
                Commission name: <input type="text" name="ComName" value="@Request["ComName"]" placeholder="Type here Commission name" />

                <input type="submit" value="Show" />
                <p>Calculated values displayed for: <strong> @Request.Form["ComName"]</strong></p>


                @grid.GetHtml(
          tableStyle: "table",
          alternatingRowStyle: "alternate",
          headerStyle: "header",
          columns: grid.Columns(
                grid.Column("Consumption", "Consumption{Ist Kosten Material}", format: @<text>@item.Consumption.ToString("#,0") €</text>),
                grid.Column("Obligo", "Obligo+ImHaus", format:@<text>@item.Obligo.ToString("#,0") €</text>),
                grid.Column("ActualCosts", "ActualCosts{Ist Fertigung}", format:@<text>@item.AktualNaklady.ToString("#,0") €</text>),
                grid.Column("Summary", "Summary{Gesamt}", format:@<text>@item.Summary.ToString("#,0") €</text>))

)
            </div>
        </div>
    </form>

在第二个查询变量中使用 where 子句作为过滤器 (...LIKE @0)。当我在所有元素的返回表中输入一个实际存在于表中的委员会名称时,它就是它们的 SUM 值。这很好,即使这个解决方案不是很合适。

问题是,当我想键入不再在表中的委员会名称时,应用程序会抛出错误“无法对空引用执行运行时绑定”

我知道问题是什么,但我不知道如何解决这个问题。不知何故,我需要添加“数据”查询的验证“如果返回的行比显示(计数)它们,否则显示委员会名称或关键字不再存在的文本” p>

即使这对于输入错误的佣金名称也很有用。感谢您的帮助!

【问题讨论】:

  • 谢谢,去看看。听到 SQL 注入的惨叫声令人难过。我从 mikesdotnetting.com 和使用网页剃刀语法的官方 webmatrix Web 开发 PDF 中获得的所有代码。也许需要找到另一种方法来创建这样的项目。

标签: asp.net razor asp.net-webpages


【解决方案1】:

您可以检查您的查询是否返回任何数据,然后显示数据或显示消息。您可以使用Any() 检查是否找到任何结果,或使用Count() 返回行数,如果您愿意(检查是否大于0)。

var data = db.Query(query, ComName);

//if (data.Count() > 0)
if (data.Any())
{
    var grid = new WebGrid(data, ajaxUpdateContainerId: "grid", canPage: false, canSort: false);

    //Rest of your code relating to showing your grid here

}
else
{
    //Show a message here that there was no data
}

【讨论】:

  • 看来这实际上是我正在寻找的。我需要使用 EF 将我的服务从 razor 升级到 MVC,但这非常有帮助。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-04
  • 2020-09-21
  • 1970-01-01
  • 2020-04-30
  • 2012-01-04
相关资源
最近更新 更多