剃刀不识别List()?

时间:2012-06-14 15:29:14

标签: asp.net-mvc-3 razor generic-list

我的观点从这样开始:

@using MyNamespace.Models.Mapping
@{
    PlacemarkKmlModel pmodel = new PlacemarkKmlModel();
    pmodel.Center.Latitude = 8.52115M;
    pmodel.Center.Longitude = -80.35981667M;
    pmodel.KmlObjectTokens kmlIDs = new List<string>();
    pmodel.KmlObjectTokens.Add("Sample1.kml");
    pmodel.KmlObjectTokens.Add("Sample2.kml");
}
@Html.Partial("_Mapping", @pmodel, @ViewData)

Intellisense在第3个pmodel语句中给了我一个红色下划线“找不到类型或命名空间'pmodel'”:

pmodel.KmlObjectTokens kmlIDs = new List<string>();

这很奇怪,因为它没有在PlacemarkKmlModel pmodel声明中给出错误,也没有在后面的语句中使用它,即使它自动完成了KmlObjectTokens但是它在3日出现了?!。

当我执行视图时,我得到同样的错误:

CS0246: The type or namespace name 'pmodel' could not be found (are you missing a using directive or an assembly reference?)

错误是错误的,因为它抱怨pmodel但它似乎不喜欢的是List()。

我的模型看起来像这样:

public class PlacemarkKmlModel
{
    public ViewportCenterModel Center { get; set; }

    public List<string> KmlObjectTokens { get; set; }
}

2 个答案:

答案 0 :(得分:4)

试试这样:

@using MyNamespace.Models.Mapping
@{
    PlacemarkKmlModel pmodel = new PlacemarkKmlModel();
    pmodel.Center.Latitude = 8.52115M;
    pmodel.Center.Longitude = -80.35981667M;
    pmodel.KmlObjectTokens = new List<string>();
    pmodel.KmlObjectTokens.Add("Sample1.kml");
    pmodel.KmlObjectTokens.Add("Sample2.kml");
}
@Html.Partial("_Mapping", pmodel, ViewData)

请注意,在您的代码中,您使用@(代替@{来打开代码段。

另请注意以下内容无效C#:

pmodel.KmlObjectTokens kmlIDs = new List<string>();

我想您只想在KmlObjectTokens实例上分配pmodel属性,在这种情况下,正确的语法是:

pmodel.KmlObjectTokens = new List<string>();

最后一点:视图不是为了包含C#代码和初始化模型。这是控制器的责任。我担心你把MVC模式中的职责搞混了。

答案 1 :(得分:0)

你可以解决剃刀治疗&lt;字符串&gt;像这样的HTML标记:

  1. 创建一个帮助器类,其中有一个字符串列表工厂:

     public class Helpers
     {
        public static List<string> GetNewStringList()
        {
            return new List<string>();
        }
     }
    
  2. 在剃须刀视图中使用该工厂创建新的字符串列表:

    @ pmodel.KmlObjectTokens = Helpers.GetNewStringList();

  3. 但是,正如Darin所说,你不应该在MVC模式中混合责任,因此模型应该已经包含填充了数据的KmlObjectTokens列表。