在视图上:
<% =Html.BeginForm("About", "Home", FormMethod.Post, new {enctype="multipart/form-data "})%>
<input type="file" name="postedFile" />
<input type="submit" name="upload" value="Upload" />
<% Html.EndForm(); %>
在Controller中,有类似的东西:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult About(HttpPostedFile postedFile)
{
//but postedFile is null
View();
}
在About()中, postedFile
为空。如何上传文件?
答案 0 :(得分:29)
使用HttpPostedFileBase(不是HttpPostedFile)并将参数命名为与表单完全相同。例如。如果你有
<input type="file" id="file1" name="file1" />
你必须拥有方法头:
public ActionResult About(HttpPostedFileBase file1)
答案 1 :(得分:7)
这不能解释您的参数为空的原因,但您可以直接深入了解请求。尽管如此,这可能不是最“MVC”的方式。在你的方法体中试试这个:
var upload = Request.Files["postedFile"]
if (upload.ContentLength > 0)
{
// Do whatever
}
要成为更多“MVC”,您可以将该代码从控制器中提取到IModelBinder实现中,并使用自定义对象作为方法的参数。此Scott Hanselman blog post显示了实现自定义ModelBinder的步骤。
答案 2 :(得分:4)
我遇到了同样的问题:
您必须为输入元素定义名称和ID:
<input type="file" name="postedFile" id="postedFileId" />
祝你好运
的Stefan
答案 3 :(得分:4)
使用此
public ActionResult Upload(HttpPostedFileBase excelfile)
更改HttpPostedFile
HttpPostedFileBase
答案 4 :(得分:3)
您应该从enctype属性的末尾删除空格:
new {enctype="multipart/form-data "} => new {enctype="multipart/form-data"}
答案 5 :(得分:2)
我也有<%= Html.BeginForm ...%>
的怪癖。所以,我使用的是。同样,在Controller端,我只是从请求对象中获取上传的文件。
试试这个。它有效:
<% using (Html.BeginForm("Post", "Home", FormMethod.Post, new {enctype = "multipart/form-data"}))
{%>
<input type="file" id="postedFile" name="PostedFile" />
<input type="submit" />
<%
}
%GT;
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Post(FormCollection form)
{
HttpPostedFileBase postedFile = Request.Files["PostedFile"];
return RedirectToAction("Index");
}
答案 6 :(得分:2)
您使用的是哪个版本的MVC? 现在我和RC候选人一起尝试使用HttpPostedFile,我得到了“没有空白的构造函数错误”。我不得不使用HttpPostedFileBase。
更重要的是,您正在运行的MVC版本,具体取决于版本,检索发布文件的方式会有所不同。
答案 7 :(得分:2)
“multipart / form-data”之后的空白是真正的问题...
答案 8 :(得分:2)
new { enctype = "multipart/form-data", @data_ajax = "false" }
答案 9 :(得分:1)
此外,我发现文件上传所在的表单声明必须始终具有
new {enctype="multipart/form-data"}
答案 10 :(得分:1)
以下是上传文件所需的所有内容
//in your model
public partial class Profile
{
[DisplayName("Image Upload")]
[DataType(DataType.Upload)]
public HttpPostedFileBase FileUpload { get; set; }
}
// in your view
@model ProjName.Blabla.Profile
@using (Html.BeginForm("Edit", "Profile", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
<input type="file" name="FileUpload" id="FileUpload" value="Choose File" class="form-control" />
<input type="submit" value="Save" class="btn btn-default" />
}
答案 11 :(得分:0)
encType="multipart/form-data"
将<?php
class ScriptSoapClient extends SoapClient {
public function __doRequest($request,$location,$action,$version,$one_way=0) {
$response=parent::__doRequest($request,$location,$action,$version,$one_way);
$response=preg_replace('#^.*(<\?xml.*>)[^>]*$#s','$1',$response);
return $response;
}
}
// | is used as splitting char for arrays
function runService() {
//global $KERNELURL;
$KERNELURL="127.0.0.1:8282/axis2/services/MiddleService?wsdl"; $num=func_num_args();
if ($num < 2) return;
$service=new ScriptSoapClient(null, array("location"=> $KERNELURL,"uri"=>"http://ws.apache.org/axis2","trace"=>true));
$p[0]=new SoapParam((string)func_get_arg(0),"p1");
$p[1]=new SoapParam((string)func_get_arg(1),"p2");
for ($i=2; $i < $num-1;$i++) {
$param=func_get_arg($i);
if (is_array($param)) {
$data="||ARR||".implode("|",$param);
} else {
$data=$param;
}
$p[$i]=new SoapParam((string)$data,"p3");
}
$p[$num-1]=new SoapParam((string)func_get_arg($num-1),"p4");
try {
$result=$service->__soapCall("run",$p);
} catch (SoapFault $e) {
echo $e;
return "error";
}
unset($service);
if (is_array($result)) {
return $result["return"];
} else {
return $result;
}
}
$res2=runService("Service_addCostume","addCostume","costum1");
?>
添加到表单中。