CS0201:只有赋值、调用、递增、递减、等待和新对象表达式可以用作语句

Posted

技术标签:

【中文标题】CS0201:只有赋值、调用、递增、递减、等待和新对象表达式可以用作语句【英文标题】:CS0201: Only assignment, call, increment, decrement, await, and new object expressions can be used as a statement 【发布时间】:2015-07-05 18:16:22 【问题描述】:

我在以下代码行中不断收到上述错误:

<select 
 id="buildingSlctRoom@Model.roomNo;Request@Model.RequestNo;" 
 class="form-control" 
 onchange="fillRooms(@Model.roomNo;,@Model.RequestNo;,$('#buildingsslctRoom@Model.roomNo;Request@Model.RequestNo;').val())" 
 style="width:auto;">

我无法从该代码中看到任何可能导致此问题的原因?

有什么想法吗?

谢谢

包含 roomNo 和 RequestNo 的类

    namespace Timetabling06.ModelViews
    
         public class roomCheckerObject
         
              public string code  get; set; 
              public ICollection<room> rooms  get; set;   
              public ICollection<room> deptRooms  get; set; 
              public ICollection<building> buildings  get; set; 
              public int roomNo  get; set; 
              public int RequestNo  get; set; 
         
     

设置对象变量的代码:

public ActionResult _roomChecker(int roomNum, int requestNum, String user, int roundID, int day, int time, int length,int[] weeks,int students,String roomType,String park, String[] facilities)
        var rooms = db.rooms.Include(r=>r.building).Include(r=>r.facilities);
        rooms = rooms.Where(r => r.capacity >= students);
        if(roomType != "Any")
            rooms = rooms.Where(r=>r.roomType.Equals(roomType));
        
        if (park != "Any")  
            rooms = rooms.Where(r=>r.building.park.Equals(park));
        

        if (facilities != null)
        
            for (var i = 0; i < facilities.Length; i++)
            
                rooms = rooms.Where(r => r.facilities.Any(f => f.facilityName.Equals(facilities[i])));

            
        

        var deptRooms = db.rooms.Include(r => r.building).Include(r => r.facilities).Where(r=>r.belongsTo.Equals(user));

        roomCheckerObject suitableRooms = new roomCheckerObject();
        suitableRooms.code = user;
        suitableRooms.roomNo = roomNum;
        suitableRooms.RequestNo = requestNum;
        if(rooms.Count() >0)
            suitableRooms.rooms = rooms.ToList();
            var buildings = rooms.Select(r => r.building).Distinct();
            suitableRooms.buildings = buildings.ToList();
        


        if(deptRooms.Count() >0)
            suitableRooms.deptRooms = deptRooms.ToList();
        
        return PartialView(suitableRooms);
    

【问题讨论】:

什么是 Model.RequestNo & Model.roomNo & Model.RequestNo 的声明? @Jacek 在上面添加了更多代码 ^^ 我建议您阅读有关命名变量、类和方法的 c# 中的名称约定。它将使您的代码在未来更具可读性 @Jacek 我会的,谢谢 【参考方案1】:
@Model.RequestNo;,$('#buildingsslctRoom@Model.roomNo;

把这段代码改成这个

@Model.RequestNo,$('#buildingsslctRoom@Model.roomNo

删除 字符,这是用于执行代码,而不是用于使用值。 Ot 应该可以解决您的问题。

【讨论】:

感谢您的解释。我一直这样做,想知道为什么我有这个错误。 Razor 和 ASP 新手哈哈【参考方案2】:

您正试图在 html 中编写剃须刀代码,但您的编写方式不正确。

要在 html 中编写 razor 代码,你需要这样做:

<select 
id="buildingSlctRoom@(Model.roomNo)Request@(Model.RequestNo)" 
class="form-control" 
onchange="fillRooms('@Model.roomNo','@Model.RequestNo',$('#buildingsslctRoom@(Model.roomNo)Request@(Model.RequestNo)').val())" 
style="width:auto;">

【讨论】:

【参考方案3】:

问题在于@Model.roomNo; 被评估为命令。它会给你异常,因为它既不是方法调用也不是属性赋值(如异常中所写)。

如果你想要@( Model.roomNo)的输出值

【讨论】:

以上是关于CS0201:只有赋值、调用、递增、递减、等待和新对象表达式可以用作语句的主要内容,如果未能解决你的问题,请参考以下文章

unity error CS0201: 只有赋值、调用、递增、递减、等待和新对象表达式可以作为语句使用

C#错误CS0201:只有赋值、调用、递增、递减和新对象表达式可以作为语句使用

在C#三元运算符给出错误:只有赋值,调用,递增,递减和新对象表达式可用作语句

只有赋值调用递增递减等待和新对象表达式可以作为语句使用

在 C# 三元运算符中给出错误:只有赋值、调用、递增、递减和新对象表达式可以用作语句

在cshtml文件中的C#块代码之间插入html标签