我的观点从这样开始:
@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; }
}
答案 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标记:
创建一个帮助器类,其中有一个字符串列表工厂:
public class Helpers
{
public static List<string> GetNewStringList()
{
return new List<string>();
}
}
在剃须刀视图中使用该工厂创建新的字符串列表:
@ pmodel.KmlObjectTokens = Helpers.GetNewStringList();
但是,正如Darin所说,你不应该在MVC模式中混合责任,因此模型应该已经包含填充了数据的KmlObjectTokens列表。