【问题标题】:How do I get the fully qualified member name in an EditorTemplate?如何在 EditorTemplate 中获取完全限定的成员名称?
【发布时间】:2013-03-27 08:43:44
【问题描述】:

我有一个 ASP.NET MVC 4 站点,我将嵌套属性传递给 EditorTemplate 并使用 ViewData.ModelMetadata.PropertyName 构建字段名称,但是,这将获取子属性的属性名称,而不是完整的点符号名称我正在编辑的属性。

举个例子最能说明问题:

给定以下类型

public class EditEntityViewModel
{
     // elided
     public Entity Entity { get; set}
}


public class Entity 
{
    // elided
    public string ImageUrl { get; set; }
}

我的编辑和创建视图如下:

@model EditEntityViewModel

<div>
    @Html.EditorFor(model => model.Entity.ImageUrl , "_ImageUploader")
</div>

_ImageUploader.cshtml 编辑器模板如下

@model System.String

<div class="uploader">
    @Html.LabelFor(model => model)
    @Html.HiddenFor(model => model)
    <div data-rel="@(ViewData.ModelMetadata.PropertyName)">   
        <input type="file" name="@(ViewData.ModelMetadata.PropertyName)Upload" />
    </div>
</div>

渲染出来的 HTML 是这样的

<div>
   <div class="uploader">
        <label for="Entity_ImageUrl">Image</label>
        <input id="Entity_ImageUrl" name="Entity.ImageUrl" type="hidden"/>
        <div data-rel="ImageUrl"> <!-- Problem -->
             <input type="file" name="ImageUrlUpload" /><!-- Problem -->
        </div>
    </div>
</div>

注意在第 5 行和第 6 行,我调用了 ViewData.ModelMetadata.PropertyName,我只获得了子属性名称 "ImageUrl",但我想要 "Entity.ImageUrl"。如何获得这个完全限定的名称?

【问题讨论】:

  • 你使用的是 MVC3 还是 MVC4?

标签: asp.net-mvc asp.net-mvc-4 modelmetadata


【解决方案1】:

使用@Html.NameFor(model =&gt; model) / @Html.NameForModel() 而不是ViewData.ModelMetadata.PropertyName,这个方法应该会给你想要的名字。它是Mvc3Futures 包的一部分,已添加到 MVC4。

【讨论】:

  • 注意:元素的id属性将.替换为_,所以如果你想引用id(例如使用jQuery)你可以使用@Html.IdForModel()来代替。
  • 这个。类似问题的其他答案涉及滚动您自己的字符串连接来构建名称。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-05-17
  • 2020-11-22
  • 1970-01-01
  • 2016-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多