Html.Editor没有找到编辑器模板

时间:2014-10-31 18:12:26

标签: asp.net-mvc razor

请帮忙!这让我疯了。

我试图重构一些代码,因为模型,视图和控制器中有一堆剪切和粘贴。

查看模型

namespace Foo.Models.Bar
{
[KnownType(typeof(RecruitEditModel))]
public class RecruitEditModel
{
    //...
    public CommonServicesEditModel Services { get; set; }

服务是一个属性,它包含模型中我放置公共代码的另一个类。

在Foo \ Views中查看

@model RecruitEditModel
@* ... *@
@using (Html.BeginForm("RecruitEdit", "AppMgmt", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
@* ... *@
@*@Html.Partial("TradeEdit", Model.Services)  <<< DOESN'T BIND *@
 @Html.EditorFor(m => m.Services)  @* BINDS *@
<input type="submit" value="Save" />
}

在嵌套类上使用partial不会起作用,因为嵌套类不会绑定。 (http://lostechies.com/jimmybogard/2011/09/07/building-forms-for-deep-view-model-graphs-in-asp-net-mvc/

所以我必须使用编辑器模板。

Foo \ Views \ Shared \ EditorTemplates \ TradeEdit.cshtml中的编辑模板

@model Services.CommonServicesEditModel
    <div class="left">
        <h3>Howdy</h3>
        <div class="left theTrade">General Contracting:&nbsp;&nbsp;</div>
        @Html.EditorFor(model => model.TradeGC)
        @Html.ValidationMessageFor(model => model.TradeGC)
    </div>
    @*...*@

我遇到的问题是显然没有找到编辑器模板,而是生成了默认编辑器。

我在尝试调整CSS时发现了这一点。 &#34;你好&#34;在EditorTemplate的标题中没有生成。无论我做什么,如果没有评论EditFor调用,那么显示的字段就没有变化。

我正在本地IIS上运行调试,我尝试重新启动应用池并刷新网站,但没有任何乐趣。

如何在编辑器模板中进行更改以传播到视图?

2 个答案:

答案 0 :(得分:1)

答案显而易见,但并不那么明显。我认为编辑器模板将解析编辑器模板中的模型声明。不,比这更容易。

编辑器模板必须命名为{type} .cshtml。

另一种可能性是我可以像这样使用UIHint:

   [UIHint("TradeEdit")]
   public CommonServicesEditModel Services { get; set; }

但我还没有测试过。

感谢Growing With the Web的答案。

答案 1 :(得分:-1)

在模型'RecruitEditModel'中,将嵌套类与'virtual'关键字放在一起,如下所示:

namespace Foo.Models.Bar
{
[KnownType(typeof(RecruitEditModel))]
public class RecruitEditModel
{
  //...
  public virtual CommonServicesEditModel Services { get; set; }

如果您有数据库,则应在此之后更新它:)