【问题标题】:Using nested IF statements causing a "CS1513: } expected" error (C# in Webmatrix)使用嵌套 IF 语句导致“CS1513: } 预期”错误(Webmatrix 中的 C#)
【发布时间】:2012-11-05 14:19:39
【问题描述】:

使用 C# 和 Webmatrix 处理我的第一个网页项目。所以事情一直进展顺利,但现在遇到了一个让我难过的问题。 我正在做的是在此页面上发布一个包含一条消息的表单,然后我将消息保存到数据库(稍后也会让电子邮件部分继续运行)。

我已经发布了下面的代码,它实际上比说明问题所需的时间更长,但我认为我还是会发布它。当我看到倒数第二个右大括号以黄色突出显示时,WebMatrix 已经在我尝试运行它之前突出显示了手头的问题。运行代码时(并且 post 值都可以),我收到错误“CS1513:} 预期”。我最初以为我错误地添加了一个额外的右花括号,但是在检查和仔细检查然后慢慢地逐行重建代码以识别在哪一行之后开始出错,我现在得出的结论是没有任何“if(IsPost && WebSecurity.IsAuthenticated)”“if”语句中嵌套的“if”和“foreach”语句,然后它“工作”(尽管显然不符合所需的逻辑)。

我检查了一下,发现很多 C# 代码示例都是这样做的。任何帮助、指针或其他任何东西都非常感谢。

@{
if(IsPost && WebSecurity.IsAuthenticated){
    var fromEmail = WebSecurity.CurrentUserName;
    var fromUserId = @WebSecurity.CurrentUserId;
    var message = Request["message"];
    var uid = Request["uid"];
    bool multiSend = false;
    var db = Database.Open("Tennegize");

    var skillLevel = 0;
    if(Request["multi"]=="1"){
        multiSend = true;
    }

    //Save to message to BD
    var insertQuery = "INSERT INTO Messages (UserEmail, UserId, Message) VALUES (@0, @1, @2)";
    db.Execute(insertQuery, fromEmail, fromUserId, message);
    decimal messageId = db.GetLastInsertId();

    if(multiSend){
         //Get email address' from all recipients
        var sql2 = "SELECT Email FROM UserProfile WHERE SkillLevel = @0";
        var data2 = db.Query(sql, skillLevel);
        var totalRecipents = data2.Count();
        //Log all recipients who will recieve this notification
        foreach(var recipient in data2){
            insertQuery = "INSERT INTO Message_Recipients (UserId, UserEmail, MessageId) VALUES (@0, @1, @2)";
            db.Execute(insertQuery, uid, data.Email, messageId); 
        }

    }else{
        // Get to recipients email address
        var sql = "SELECT Email FROM UserProfile WHERE UserId = @0";
        var data = db.QuerySingle(sql, uid);
        //Log the recipient of this norification
        insertQuery = "INSERT INTO Message_Recipients (UserId, UserEmail, MessageId) VALUES (@0, @1, @2)";
        db.Execute(insertQuery, uid, data.Email, messageId);

    }

    }
}

【问题讨论】:

  • 它大概指向你代码中的一行——那一行是什么?
  • 另外,你真的不应该把这样的逻辑放在你的视图中。
  • 由于某种原因,列出的行号与我的代码中的行号不匹配(它比我的代码行高出大约 2 倍),但是看到它周围的代码,它说它是最后一个右括号。感谢您对我的逻辑布局的评论。恐怕这是我刚刚阅读“使用 WebMatrix 开始 ASP.NET 网页”之后的第一个真正的项目。简要浏览了 MVC,但这些概念对我来说更难掌握,因此决定坚持使用“更简单”的方式来获得结果。
  • 您在@{ 处打开了一个从未关闭的大括号。

标签: c# webmatrix


【解决方案1】:

我的猜测是var fromUserId = @WebSecurity.CurrentUserId; 行导致了问题。删除WebSecurity.CurrentUserId之前的@

【讨论】:

  • 不可能!不知何故对“复制和粘贴”错误视而不见!
  • 我也有同样的问题,并认为它与嵌套的 if 语句有关。就我而言,我在使用 Webmatrix 2 时添加了一些额外的@,但升级到 v3 后就不需要这些了
猜你喜欢
  • 2015-10-16
  • 1970-01-01
  • 1970-01-01
  • 2013-07-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多