MVC3文件输入

时间:2011-08-09 16:48:03

标签: .net asp.net-mvc-3 razor

我正在尝试使用html文件输入来获取文件的路径和名称。我不想上传文件,因为文件可能非常大,我不想将文件数据传回服务器,只是为了获取文件名。

有没有办法将文件输入值绑定到我的模型中的属性,或者至少将文件名传递回服务器?

这是我的代码:

@using (Html.BeginForm("Upload", "Management", FormMethod.Post , new {enctype="multipart/form-data"})) {
    <div>
        Upload New Pricing Workbook: <input type="file" name="browse" id="browse" />
    </div>

    <div>Was Won: @Html.EditorFor(file => file.WasWon)</div>

    <div>
        <input type="submit" name="upload" id="upload" value="Upload" />
    </div>
}

3 个答案:

答案 0 :(得分:1)

  

有没有办法将文件输入值绑定到我的模型中的属性,或者至少将文件名传递回服务器?

你需要javascript。您可以在表单中包含一个隐藏字段,然后订阅表单的提交处理程序,并在此处理程序中设置隐藏字段的值,从文件输入字段的值中清除文件字段的值。此外,如果您对上传文件不感兴趣,则表格中不需要enctype属性

$('form').submit(function() {
    $('#someHiddenField').val($('#browse').val());
    $('#browse').val(''); 
});

所有这些都说,出于安全原因,您无法使用javascript获取客户端计算机上文件的完整路径。您将只使用$('#browse').val()获取文件名,这是您所希望的最佳文件。

如果你想获得路径,你可以包含一个标准输入字段,然后让用户输入。这样你就可以只在服务器上获得你需要的东西(某个文件的路径)。

答案 1 :(得分:0)

删除表单的enctype属性应该足够了,文件名将作为upload字符串参数填充在控制器操作中。

答案 2 :(得分:0)

这是一个肮脏的例子,应该足以让您更新/调整以满足您的需求:

型号:

public class HomeModel
{
   public string ClientFileName { get; set; }
}

控制器:

   public class homeController : Controller
    {
        //
        // GET: /home/

        public ActionResult Index()
        {
            HomeModel hm = new HomeModel();
            if (Request.Form["selectedFilePath"] != null)
                hm.ClientFileName = Request.Form["selectedFilePath"];

            return View();
        }

    }

视图:

@{
    ViewBag.Title = "Index";
}

<script type="text/javascript">
    function getFileName() {
        document.getElementById('selectedFilePath').value = document.getElementById('selectedFile').value;
    }
</script>

<form method="post" action="/home/Index">
<input type="file" id="selectedFile" />
<input type="hidden" id="selectedFilePath" name="selectedFilePath" />
<button onclick="getFileName();">
    Submit file name</button>
</form>