如何将物理位置的文件带入MVC中的模型

时间:2017-03-02 08:05:11

标签: asp.net-mvc file-upload

我有一个模型如下

public class request_dtls
{
    [Key]
    public long request_detail_id { get; set; }
    public string first_name { get; set; }
    public string last_name  { get; set; }

    [InverseProperty("request_dtls")]
    public virtual IList<dtls_doc> dtls_doc { get; set; }
}

public class dtls_doc
{
    [Key]
    public long doc_line_id { get; set; }
    public long request_detail_id { get; set; }
    public string file_name { get; set; }
    public string document_name { get; set; }
    [NotMapped]
    public HttpPostedFileBase UpFile { get; set; }

    [ForeignKey("request_detail_id"), InverseProperty("dtls_doc")]
    public virtual request_dtls request_dtls { get; set; }
}

在视图中,多个文档将添加到每个详细信息并成功保存。文件路径将保存详细级别,dtl_doc表包含文档名称等。

现在我需要检索上传的文件并在另一个视图中显示。

我写了如下视图

@if (Model != null)
{
    if (Model.dtls_doc != null)
    {
        for (int i = 0; i < Model.dtls_doc.Count; i++)
    {
    <tr>
        <td>
            @Html.HiddenFor(model > Model.dtls_doc[i].request_detail_id);
            @Html.HiddenFor(model > Model.dtls_doc[i].doc_line_id);
            @Html.TextBoxFor(model => model.dtls_doc[i].document_name)</td>
        <td>
            @Html.TextBoxFor(model => model.dtls_doc[i].UpFile, new { type = "file" })
            <input type="hidden" name="dtls_doc.Index" value="@i" />
        </td>
    </tr>
}

它给出了以下屏幕

enter image description here

如何携带与每个&#34; chooseFile&#34;相对应的物理存储文件?按钮如下

enter image description here

被修改

 <table id="doc" class="table table-striped table-hover table-bordered">

 <tr>
 <th style="width:200px">
  Document Name
</th>

 <th style="width:500px">
  File to Upload
  </th>
<th style="width:6px">
</th>
</tr>
@if (Model != null)
    {
        if (Model.dtls_doc != null)
        {
            for (int i = 0; i < Model.dtls_doc.Count; i++)
        {
        <tr>
            <td>
                @Html.HiddenFor(model > Model.dtls_doc[i].request_detail_id);
                @Html.HiddenFor(model > Model.dtls_doc[i].doc_line_id);
                @Html.TextBoxFor(model => model.dtls_doc[i].document_name)</td>
            <td>
@Html.ActionLink("Download File", "download_file", new { id = Model.dtl_doc_dtls[i].doc_line_id })
                <input type="hidden" name="dtls_doc.Index" value="@i" />
            </td>
        </tr>
    }

这给出了以下结果...对于现有的它将是一个下载的链接,它正在下载。 对于新的,它将是文件类型

enter image description here

新添加行的模板

  <table id="Newdoc" style="display:none">
    <tr>
    <td><input type="text"  name="dtls_doc[#].document_name" value /></td>

<td>
<input type="file"  name="dtls_doc[#].UpFile" />

<input type="hidden" name="dtls_doc.Index" value="%" />
 </td>
<td><input id="doc_delete" class="doc_delete" value="X" type="button"></td>
</tr>
</table>

用于添加新行的Jquery

 $("#N").click(function (event) {

                event.preventDefault();
                var index = (new Date()).getTime();
                var clone = $('#Newdoc').clone();
                clone.html($(clone).html().replace(/\[#\]/g, '[' + index + ']'));
                clone.html($(clone).html().replace(/"%"/g, '"' + index + '"'));
                var html = clone.html();
                $("#doc").append(clone.html());


            });

用于删除行的Jquery

 $('#doc').on('click', 'td input.doc_delete', function () {
                $(this).closest('tr').remove();
            });

但是在提交表单时,新添加的文件没有进入控制器..显示3计数 enter image description here

0 个答案:

没有答案