我正在尝试构建一个asp.net mvc 4应用程序,它使用部分视图和display / editortemplates和Kendo ui。 我有一个特定页面的viewmodel:
public class Plant {
public Guid PlantId{ get; set; }
public string Name { get; set; }
public string Description { get; set; }
public ICollection<Leaf> Leafs{ get; set; }
public ICollection<Flower> Flowers{ get; set; }
public ICollection<Bug> Bugs{ get; set; }
}
而Leaf,Flower as Bug也有自己的属性。 例如:
public class Leaf {
public Guid LeafId{ get; set; }
public string Name { get; set; }
public string Documentation { get; set; }
public string Description { get; set; }
}
我在视图中使用了partialviews,因此使用ajax更新它们变得更加容易。 我的正常观点:PlantDetail.cshtml
@model Plant
<table>
<tr>
<td>
<h2>@Html.Label(Resources.PlantDetailTitle)</h2>
</td>
<td>
@Html.HiddenFor(m => m.PlantId)
@Html.DisplayFor(m => m.Name)
</td>
</tr>
<tr>
<td>@Html.LabelFor(m => m.Description)
</td>
<td>
@Html.DisplayFor(m => m.Description)
</td>
</tr>
</table>
@{Html.RenderPartial("_flowers", Model);}
@{Html.RenderPartial("_leafs", Model);}
在我的部分视图中“_leafs”(以及“_flowers”中我有一系列按钮,用于调用需要LeafId和PlantId的动作:
部分视图“_leafs”:
@model List<Leaf>
@for (int i = 0; i < Model.Count(); i++ )
{
@(Html.DisplayFor(m => m[i]))
}
我的displayTemplate“Leaf.cshtml”:
@model Leaf
@Html.HiddenFor(m =>m.LeafId)
<a class='k-button k-button-icontext' href=@Url.Action("InitiateLeaf", "Plant") +"?
leafId=@Model.LeafId&plantId=#=PlantId#">@Model.Name</a>
现在我的问题是我似乎无法在我的displaytemplate中访问我的父Viewmodel的PlantId。 (我的每个displaytemplates都有同样的问题..) 我已经在url.action中尝试了routevalues,我知道我最终可以在javascript中访问PlantId,但是有没有(mvc)方法继续使用displaytemplates并且不会将我的plantId复制为我的属性孩子叶子viewmodel?
我已经尝试用类似的东西访问我的parentviewcontext “@ HttpContext.Current.Request.RequestContext.RouteData.Values [”controller“]。ToString()”在我的displaytemplate中,但似乎找不到我的PlantId的值(如果它甚至存储在那里......)。
其他人还有一些建议吗?
答案 0 :(得分:1)
您提到的一个选项是使用jquery访问父PlantId。如果您需要访问父项的属性,则最好设计类似于Entity framework建议我们创建模型类的视图模型。
public class Plant {
public Guid PlantId{ get; set; }
public string Name { get; set; }
public string Description { get; set; }
public ICollection<Leaf> Leafs{ get; set; }
public ICollection<Flower> Flowers{ get; set; }
public ICollection<Bug> Bugs{ get; set; }
}
所以你的Leaf类也应该有一个导航属性来回到Plant。
public class Leaf {
public Guid LeafId{ get; set; }
public string Name { get; set; }
public string Documentation { get; set; }
public string Description { get; set; }
public virtual Plant Plant { get; set; }
public Guid PlantId { get; set; }
}
确保在创建ViewModel时填充Plant属性和PlantId。希望这有帮助