我正在使用this简单教程在我的MVC5 C#VS2015项目中上传文件,并且在控制器操作中不需要其他参数,文件成功上传。这是控制器动作
[HttpPost]
public string UploadFile(HttpPostedFileBase file)
{
if (file.ContentLength <= 0)
throw new Exception("Error while uploading");
string fileName = Path.GetFileName(file.FileName);
string path = Path.Combine(Server.MapPath("~/Uploaded Files"), fileName);
file.SaveAs(path);
return "Successfuly uploaded";
}
和查看的上传表单
@using (Html.BeginForm("UploadFile", "Documents", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
@Html.TextBox("file", "", new { type = "file" })
<input type="submit" value="Dodaj fajl" />
}
在该视图中,我有另一个名为DocumentNumber
的变量,我需要将其传递给UploadFile
操作。我猜只是我的动作的标题看起来像这样:public string UploadFile(HttpPostedFileBase file, int docNo)
如果我想传递该变量,但我也不知道如何在视图的形式中设置这个值。我尝试添加:new { enctype = "multipart/form-data", docNo = DocumentNumber }
但没有成功。如何通过post方法将DocumentNumber
(需要隐藏,不可见)从我的视图传递给控制器的操作?
答案 0 :(得分:3)
向操作方法添加参数
[HttpPost]
public string UploadFile(HttpPostedFileBase file,int DocumentNumber)
{
}
并确保您的表单具有相同名称的输入元素。它可以是隐藏的或可见的。提交表单时,输入的值将与输入元素名称相同,并与我们的操作方法参数名称匹配,因此值将映射到该值。
@using (Html.BeginForm("UploadFile", "Documents", FormMethod.Post,
new { enctype = "multipart/form-data" }))
{
@Html.TextBox("file", "", new { type = "file" })
<input type="text" name="DocumentNumber" value="123"/ >
<input type="submit" value="Dodaj fajl" />
}
如果要使用模型的DocumentNumber
属性值,可以使用其中一个辅助方法生成带有值的输入元素(应在GET操作方法中设置)
@Html.TextBoxFor(s=>s.DocumentNumber)
或隐藏的输入元素
@Html.HiddenFor(s=>s.DocumentNumber)