2011-08-09 44 views
0

我想使用html文件輸入來獲取文件的路徑和名稱。然而,我不想上傳文件,並且看到文件可能非常大,我不想將文件數據傳回服務器,只是爲了獲取文件名。MVC3文件輸入

是否有文件輸入值的屬性綁定在我的模型的方式,或至少通過不僅是文件名回服務器?

這裏是我的代碼:

@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> 
} 
+4

對不起,但我對這一個好奇地好奇 - 爲什麼在世界上你只需要本地路徑而不是整個文件? –

+0

我正在使用服務來解析文件,並不需要它在服務器上,只是路徑。 – shuniar

回答

1

是否有文件輸入值的屬性綁定在我的模型的方式,或至少通過不僅是文件名回服務器?

您將需要這個JavaScript。您可以在表單中包含一個隱藏字段,然後訂閱表單的提交處理程序,並在此處理程序內部根據文件輸入字段的值設置隱藏字段的值,並清除文件字段的值。此外,如果你不感興趣,上傳文件,你不需要enctype屬性形式

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

這一切都被說的,出於安全考慮使用你不能得到整個路徑到客戶端計算機上的文件JavaScript的。你將只能得到使用$('#browse').val()的文件名,這是你所希望的最好的。

如果你想要得到的路徑,你可以包括標準輸入字段,讓用戶在鍵入它。這樣你會得到你只需要什麼(一些文件的路徑)的服務器上。

+0

當你說隱藏的領域,你的意思是隱藏的輸入,是否正確?那麼你需要確保'Management/Upload'接受一個額外的輸入(即文件輸入值) –

+0

@Evan Layman,是的,我的意思是隱藏的輸入字段,並且是視圖模型,POST控制器動作應該相應地進行調整。 –

+0

謝謝。我只是爲我自己澄清,並可能幫助shuniar –

0

刪除表格的enctype屬性就足夠了,文件名將作爲upload字符串參數填充到控制器操作中。

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>