摆脱实际上永远不会发生的Visual Studio警告

时间:2017-11-08 20:53:54

标签: .net asp.net-mvc razor visual-studio-2012

我有一个<span>,其值取决于条件:

@{
      if(Session["Status1"]!=null){
           <span id="currentStatus">Found</span>
      }
       else {
           <span id="currentStatus">Not Found</span>
        }
  }

正如您所看到的,由于条件检查,永远不会有2 <span>具有相同的ID currentStatus。但是,Visual Studio 2012(不是社区也不是Express)正在给我一个警告:

  

此页面上的另一个对象已使用ID currentStatus。

如何摆脱此警告?

1 个答案:

答案 0 :(得分:1)

正如this feedback所述,此行为按设计

  

不幸的是, HTML验证程序并非旨在确定是否   由于服务器代码,有条件地发出了块。因此,   它只看到HTML,而不是if语句,并认为有两个   具有相同ID的元素。

要完全摆脱此警告,您可以创建一个变量并在单个span元素中使用它:

@{
    string status = (Session["Status1"] != null) ? "Found" : "Not Found";
}

<span id="currentStatus">@status</span>

或者将条件检查置于控制器操作方法中,并将结果分配给viewmodel字符串属性:

// Model
public class ViewModel
{
    public string Status { get; set; }
}

// Controller
public ActionResult ActionName()
{
    var model = new ViewModel();
    model.Status = (Session["Status1"] != null) ? "Found" : "Not Found";
    return View(model);
}

// View
@model ViewModel
<span id="currentStatus">@Model.Status</span>

注意:不幸的是我无法在VS 2013及以上版本中看到警告,因此它可能只影响某些版本的MVC(例如MVC 3)。

类似问题:

Give id to html element inside Razor without using class