2011-02-28 44 views
1

我是新来MVC3和剃刀所以这可能是显而易见的,但没有googlefu量内的视图模型已经找到了我一个答案。使用HTML.EditFor对父视图模型

我有一个叫做用户视图模型,用户里面我有一个名为地址第二视图模型。

地址用于所有的地方,所以我打算在具有以下\

的ViewModels:

  1. 用户 - > {FNAME,LNAME,地址}
  2. 业务 - > {公司名称,地址}
  3. 家 - > {号码,地址}
  4. 地址 - > {addyline1,addyline2,市,州,邮编}

阿拉... user.address.addyline1,business.address.addyline1

所有这些都会在他们里面的地址。

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

工作正常,但不使用我创建的模板

,则须─> shared-> editortemplate-> address.cshtml

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

不工作在所有。

回答

1

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

您可以通过另一件事来控制您的对象如何在不必每次指定局部视图模板的情况下进行渲染,即创建一个称为EditorTemplate的对象。以下是你的操作方法:

在ASP.NET MVC解决方案的Views->Shared文件夹下创建一个名为EditorTemplates的文件夹。 在该文件夹中创建一个强类型的视图,其名称要用于(在你的情况下,它应该被称为Address.cshtml)编辑器类型的名称匹配,并且您还可以设置脚手架模板Edit有一个现成的-go编辑器为您生成。你全都准备好了!所有剩下的就是添加

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

希望这有助于;)

+0

试过了,既没有工作:@ Html.EditorFor(model => model.address,“〜/ Views/Shared/_AddressPartial.cshtml”)以及@ Html.EditorFor(model => model.address,“_AddressPartial “) – Stephen 2011-02-28 21:22:44

+0

我想问题可能是elsewere,我已经尝试了两种方法(发布之前),并且都工作得很好:s – AbdouMoumen 2011-02-28 21:34:35

+0

我最终从头开始了一个项目。我只是将文件从旧文件复制并粘贴到新文件,一切正常。我已经做了多次,现在它工作正常。 – Stephen 2011-03-01 15:05:15

1

那么你不使用放置“cshtml”部分通常当你把模板名称可能"_AddressPartial"会适合你,但我想你只想省略该参数,并把你的自定义剃刀模板在“ 〜/查看/共享/ EditorTemplates/address.cshtml”

1

该文件夹的名称,将您Address.cshtml

EditorTemplates 

,而不是EditorTemplate(一个小s可以使一个很大的区别)。