【问题标题】:HttpPostedFileBase editor for using with EditorForModel用于与 EditorForModel 一起使用的 HttpPostedFileBase 编辑器
【发布时间】:2011-01-27 00:28:02
【问题描述】:

好吧,也许我遗漏了什么,但我想不通。使用 ASP.NET MVC 3,Razor 视图。

我有一个这样的模型对象:

public class MyModel
{
    public HttpPostedFileBase File { get; set; }
    public string Title { get;set; }
    public string Description { get; set; }
}

当我在强类型视图中调用 @Html.EditorForModel() 时,它只生成 Title 和 Description 表单字段。

我创建了包含虚拟内容的文件:Views\Shared\EditorTemplates\HttpPostedFileBase.cshtml,但它仍然没有被渲染。

是否可以让EditorForModel生成文件输入字段?

【问题讨论】:

    标签: asp.net-mvc


    【解决方案1】:

    我设法通过创建自定义 Object.cshtml 编辑器模板使其工作:

    @foreach (var prop in ViewData.ModelMetadata.Properties.Where(pm => pm.ShowForEdit && !ViewData.TemplateInfo.Visited(pm))) 
    {
        if (prop.HideSurroundingHtml) 
        {
            @Html.Editor(prop.PropertyName)
        } 
        else 
        {
            <div class="editor-container">
                <div class="editor-label">
                    @Html.Label(prop.PropertyName, prop.DisplayName)
                </div>
                <div class="editor-field">
                    @Html.Editor(prop.PropertyName, prop.TemplateHint)
                    @Html.ValidationMessage(prop.PropertyName, "*")
                </div>
            </div>
        }
    }
    

    基本上它为模型的每个属性调用Html.Editor()。我不知道这是否是一个好的解决方案,但它现在有效。

    【讨论】:

      【解决方案2】:

      我有investigated 一个类似的问题 - 复杂属性的编辑器没有输出。您的情况可能有所不同,但我发现的解决方法(为您的模型创建编辑器 - Model.ascx)也应该适合您。

      【讨论】:

      • 我不想为每个有文件输入的模型创建一个视图,因为我的应用程序中会有一些。
      • 我知道这很糟糕,但这可能是唯一的解决方案。通常您可以使用 UIHint,但由于 HttpPostedFileBase 是一种复杂类型,因此不会被考虑在内。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-27
      • 2017-06-05
      • 1970-01-01
      相关资源
      最近更新 更多