asp.net-mvc - 如何在 EditorTemplate 中获取完全限定的成员名称?

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

我有一个 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; }
}

我的编辑和创建 View 如下:

@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”。如何获得这个完全限定名称?

最佳答案

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

关于asp.net-mvc - 如何在 EditorTemplate 中获取完全限定的成员名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15654716/

相关文章:

c# - MVC Controller 和业务逻辑之间的区别(3 层)

css - MVC TextBoxFor 占位符文本对齐

ASP.NET MVC - 从模型对象类型而不是 View 的声明模型使用模型的元数据

c# - 如何获取 Razor View 引擎中集合中项目的元数据?

asp.net-mvc-4 - 在每月的特定一天从我的网络应用程序自动发送电子邮件

asp.net-mvc-3 - 使用 AutoMapper 将元数据传输到 View 模型的技术

asp.net - 模型在发送到 Controller 的表单上始终为 NULL

asp.net - 是否可以扩展 ASP.NET 4.0 RequestValidator?

c# - ASP.NET Core - 下载 .exe 返回 404 错误

c# - System.Web.WebPages.TypeHelper.ObjectToDictionaryUncached