将HTML.EditorFor用于父视图模型中的视图模型

时间:2011-02-28 20:15:37

标签: c# asp.net-mvc asp.net-mvc-3 razor

我是MVC3和razor的新手,所以这可能是显而易见的,但没有任何数量的googlefu为我找到答案。

我有一个名为user的ViewModel,在用户内部我有一个名为address的第二个视图模型。

地址遍布各地,所以我计划拥有以下\

的ViewModels:

  1. 用户 - > {Fname,lname,Address}
  2. 商业 - > {companyname,Address}
  3. House - > {号码,地址}
  4. 地址 - > {addyline1,addyline2,city,state,zip}
  5. ...阿拉 user.address.addyline1,business.address.addyline1

    所有这些都将在其中包含地址。

    @Html.EditorFor(model => model.address)
    

    工作正常,但不使用我在

    中创建的模板
      

    &则须─GT; shared-> editortemplate-> address.cshtml

    @Html.EditorFor(model => model.address, "Address")
    

    根本不起作用。

3 个答案:

答案 0 :(得分:1)

嗯,你通常在放置模板名称"_AddressPartial"时,你不会使用put“cshtml”部分对你有效,但我认为你只想省略那个参数并放置你的自定义剃须刀“〜/ Views / Shared / EditorTemplates / address.cshtml”中的模板

答案 1 :(得分:1)

我同意@jbtule。只是从局部视图的名称中删除文件扩展名,你应该没问题。

您可以做的另一件事是控制Address对象的呈现方式,而不必每次都指定部分视图模板,这样就可以创建所谓的EditorTemplate。这是你如何做到的:

在ASP.NET MVC解决方案的EditorTemplates文件夹下创建一个名为Views->Shared的文件夹。 在该文件夹中,创建一个强类型视图,其名称与编辑器所需类型的名称相匹配(在您的情况下应该称为Address.cshtml),并且您还可以将脚手架模板设置为{{1}为您生成一个随时可用的编辑器。而且你们都准备好了!剩下的就是添加

这里有关于如何执行此操作的example(请注意,它使用的是ASP.NET MVC2,当然还有ASPX视图引擎,但这个想法是一样的。)

希望这会有所帮助;)

答案 2 :(得分:1)

放置Address.cshtml的文件夹的名称是

EditorTemplates

而不是EditorTemplate(一个小的s会产生很大的不同。)