Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 如何在EditorTemplate中获取完全限定的成员名称?_Asp.net Mvc_Asp.net Mvc 4_Modelmetadata - Fatal编程技术网

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

Asp.net mvc 如何在EditorTemplate中获取完全限定的成员名称?,asp.net-mvc,asp.net-mvc-4,modelmetadata,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 En

我有一个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>
@model edintentityviewmodel
@EditorFor(model=>model.Entity.ImageUrl,“\u ImageUploader”)
_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>
@model System.String
@LabelFor(model=>model)
@HiddenFor(model=>model)
呈现的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
,此方法应为您提供所需的名称。它是包的一部分,已添加到MVC4中。

您使用的是MVC3还是MVC4?注意:元素的id属性将
替换为
\uuu
,因此如果您想引用id(例如使用jQuery),可以改为使用
@Html.IdForModel()
。类似问题的其他答案包括滚动您自己的字符串连接以建立名称。