0

我的观点是这样开始的:

@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 在第三个 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; }
}
4

2 回答 2

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 模式中的职责。

于 2012-06-14T15:30:50.973 回答
0

您可以解决 razor 将 <string> 视为 HTML 标记的事实,如下所示:

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

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

    @pmodel.KmlObjectTokens = Helpers.GetNewStringList();

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

于 2013-04-10T07:24:01.297 回答