文件名在自定义文件中不可见输入控件发布Partial View Re通过Ajax调用进行渲染

问题描述

希望大家都过得不错。 我遇到了一个奇怪的问题。我有一个MVC应用程序,其中有部分视图,有自定义文件输入控件。当我第一次加载页面(或每当重新加载整个页面)时,我可以浏览文件并上传,但是当我通过Ajax Call(自定义文件控件所在的位置)呈现部分页面时,浏览按钮不显示文件名不再。 如果我更改不透明度,那么我可以看到文件名,但这不是正常现象,并且本机文件控件也可见,这是我不想要的。 我尝试了一切,但找不到根本原因。请求社区检查代码,并让我知道我做错了什么。

预先感谢。

自定义文件输入控件

<div class="table-cell width-45percent">
         @Html.LabelFor(model => Model.File,new { @class = "vLabel container-header fileLabel",@for = "File" })
              <div class="control-holder">
               @Html.FileInputControl("File","TestText",new { @class = "width-75percent",@Name = "File",title = "File",@id = "File" })
              </div>
 </div>

用于自定义控件的HTML扩展

   public static MvcHtmlString FileInputControl(this HtmlHelper htmlHelper,string name,string labelText,object htmlAttributes = null)
        {
            TagBuilder divWrapper = new TagBuilder("div");
            divWrapper.Attributes.Add("class","fileinputHelper");

            TagBuilder inputTextTag = new TagBuilder("input");
            inputTextTag.Attributes.Add("class","fileInput_fileName");
            inputTextTag.Attributes.Add("type","text");
            inputTextTag.Attributes.Add("title","upload file");

            TagBuilder browseLinkTag = new TagBuilder("div");
            browseLinkTag.Attributes.Add("class","fileInput_OpenFileDialogButton");
            browseLinkTag.SetInnerText(labelText);

            TagBuilder fakeFileDivWrapper = new TagBuilder("div");
            fakeFileDivWrapper.Attributes.Add("class","fakefile");
            fakeFileDivWrapper.InnerHtml = inputTextTag.ToString() + browseLinkTag.ToString();

            TagBuilder fileTag = new TagBuilder("input");

            fileTag.Attributes.Add("type","file");
            fileTag.Attributes.Add("class","fileInput_file");
            fileTag.Attributes.Add("name",name);
            if (htmlAttributes != null)
                fileTag.MergeAttributes(HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes),replaceExisting: false);

            divWrapper.InnerHtml = fileTag.ToString() + fakeFileDivWrapper.ToString();

            return new MvcHtmlString(divWrapper.ToString());
        }

用于处理文件输入的Javascript函数

 $(".fileInput_file").change(function () {
        var filePath = $(this).val();
        var fileNameIndex = filePath.lastIndexOf("\\") + 1;
        var filename = filePath.substr(fileNameIndex);
        var inputTextbox = $(".fileInput_fileName",$(this).parent());
        inputTextbox.val(filename);
        $(this).attr('title',$(this).val());
    });
 

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)