【问题标题】:Using HTML.EditFor for an viewmodel inside a parent viewmodel将 HTML.EditorFor 用于父视图模型中的视图模型
【发布时间】:2012-03-04 18:13:10
【问题描述】:

我是 MVC3 和 razor 的新手,所以这可能很明显,但没有多少 googlefu 为我找到答案。

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

地址到处都是,所以我打算有以下\

视图模型:

  1. 用户 -> {Fname, lname, Address}
  2. 企业 -> {公司名称,地址}
  3. 房子 -> {号码,地址}
  4. 地址 -> {addyline1, addyline2, city, state, zip}

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

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

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

工作正常,但不使用我在

中创建的模板

views->shared->editortemplate->address.cshtml

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

根本不工作。

【问题讨论】:

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


    【解决方案1】:

    我同意@jbtule。只需从局部视图的名称中删除文件扩展名,就可以了。

    您可以做的另一件事来控制Address 对象的渲染方式,而不必每次都指定局部视图模板,即创建所谓的EditorTemplate。以下是你的做法:

    在您的 ASP.NET MVC 解决方案中的 Views->Shared 文件夹下创建一个名为 EditorTemplates 的文件夹。 在该文件夹中,创建一个强类型视图,其名称与您想要编辑器的类型名称匹配(在您的情况下,它应该称为Address.cshtml),您还可以将脚手架模板设置为Edit为您生成的即用型编辑器。一切就绪!剩下的就是添加

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

    希望这会有所帮助;)

    【讨论】:

    • 试过了,都不管用:@Html.EditorFor(model => model.address, "~/Views/Shared/_AddressPartial.cshtml") 和 @Html.EditorFor(model => model .address, "_AddressPartial")
    • 我想问题可能出在其他地方,我已经尝试了两种方法(在发布之前),并且都工作得很好:s
    • 我最终从头开始制作了一个项目。我只是将旧文件中的文件复制并粘贴到新文件中,一切正常。我已经做过很多次了,效果很好。
    【解决方案2】:

    好吧,当您输入模板名称时,您通常不会使用 put "cshtml" 部分,"_AddressPartial" 可能对您有用,但我认为您只想省略该参数并将您的自定义剃须刀模板放入"~/Views/Shared/EditorTemplates/address.cshtml"

    【讨论】:

      【解决方案3】:

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

      EditorTemplates
      

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

      【讨论】:

        猜你喜欢
        • 2017-05-04
        • 1970-01-01
        • 2017-09-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多