0

在我的模型中,我有一个 HttpPostedFileBase 属性作为文件。在视图中,我有一个文本框“A”和一个按钮“B”。我的页面上还有一个隐藏的输入 type="file" id ="file"。在 B 单击时,我会在我的 javascript 中触发 #file.click。然后,所选文件应绑定到模型属性,并且文件名应显示在文本框中。我无法做到这一点。有什么帮助吗?我希望问题很清楚,如果没有,请告诉我,以便我可以进一步详细说明。

有什么帮助吗?

编辑1:

模型:

public class FileUploadModel
    {
        public HttpPostedFileBase File { get; set; }
        public string FileName {get;set;}
    }

看法:

<script type="text/javascript">
    $(document).ready(function () {

        $("#Browse").click(function () {

            $("#fileIputType").trigger('click');

           //now the file select dialog box opens up
          // The user selects a file
          // The file should get associated with the model property in this view
          // the textbox should be assigned the filename 

        });
    });
</script>


    @Html.TextBox("fileTextBox", Model.FileName, new { id = "fileTextBox" })

        <input type="button" id="Browse" name="Browse" value="Browse" />

        <input type="file" id="fileInputType" style="visibility:hidden"/> 

        @Html.Hidden("ModelType", Model.GetType())

  //How can i bind the selected file to the model property ( public HttpPostedFileBase File )
4

2 回答 2

1

分配File给文件输入的名称属性

    <input type="file" name="File" id="fileInputType" style="visibility:hidden"/> 

当您提交表单时,这将绑定到HttpPostedFileBase file您的操作方法中的参数。

编辑:

请记住将您的表单设置entypemultipart/form-data

@using (Html.BeginForm("Action", "Controller", FormMethod.Post, new {enctype="multipart/form-data" })
于 2013-11-07T11:52:58.483 回答
0

您不能以编程方式在 javascript 中设置input type='file'elements属性。value

为什么不将文件名显示为标签文本?FileName在您的模型(视图模型)类中有一个属性

@model MyViewModel

{

<label>@Model.FileName</label>
}

编辑:

根据您的代码

public class FileUploadModel
{
    public HttpPostedFileBase File { get; set; }
    public string FileName {get;set;}
}

在视图中

 @Html.TextBoxFor(m => m.File, new { type = "file" })

在控制器中

    using (MemoryStream memoryStream = new MemoryStream())
    {
        model.File.InputStream.CopyTo(memoryStream);
    }    
于 2013-11-07T11:12:19.180 回答