4

我正在尝试构建一个 asp.net mvc 4 应用程序,该应用程序利用部分视图和显示/编辑器模板和 Kendo ui。我有一个特定页面的视图模型:

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; }
}

我在我的视图中使用了部分视图,因此使用 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]))
 }

我的显示模板“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>

现在我的问题是我似乎无法在我的显示模板中访问我的父视图模型的 PlantId。(而且我在每个显示模板中都有同样的问题..)我已经在我的 url.action 中使用路由值进行了尝试,我知道我最终可以在 javascript 中访问 PlantId,但是有任何(mvc)方法可以继续使用 displaytemplates 并且不要将我的 plantId 复制为我的子 Leaf viewmodel 的属性?

我已经尝试在我的显示模板中使用类似“@HttpContext.Current.Request.RequestContext.RouteData.Values[“controller”].ToString()”的东西来访问我的 parentviewcontext,但似乎找不到我的值PlantId(如果它甚至存储在那里..)。

还有其他人有什么建议吗?

4

1 回答 1

1

您提到的一种选择是使用 jquery 访问父 PlantId。如果您需要访问父级的属性,最好设计您的视图模型,类似于 Entity 框架建议我们创建模型类的方式。

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。希望这可以帮助

于 2013-09-11T15:45:04.097 回答