如何写" Html.BeginForm"在剃刀 [英] How to write "Html.BeginForm" in Razor
问题描述
如果我写的是这样的:
形式的行动=图像方法=POSTENCTYPE =的multipart / form-data的
块引用>它的工作原理。
但在剃刀@这是行不通的。难道我犯任何错误?
@using(Html.BeginForm(上传,上传,FormMethod.Post,
新{ENCTYPE =的multipart / form-data的}))
{
@ Html.ValidationSummary(真) <&字段集GT; 选择一个文件<输入类型=文件名称=文件/>
<输入类型=提交值=上传/> < /字段集>
}我的控制器看起来是这样的:
的[AcceptVerbs(HttpVerbs.Post)
公众的ActionResult上传()
{
的foreach(在Request.Files字符串的文件)
{
VAR UploadedFile的= Request.Files [文件]
uploadedFile.SaveAs(使用Server.Mappath(〜/内容/图片)+
Path.GetFileName(uploadedFile.FileName));
} 返回RedirectToAction(上传);
}
解决方案以下code正常工作:
@using(Html.BeginForm(上传,上传,FormMethod.Post,
新{ENCTYPE =的multipart / form-data的}))
{
@ Html.ValidationSummary(真)
<&字段集GT;
选择一个文件<输入类型=文件名称=文件/>
<输入类型=提交值=上传/>
< /字段集>
}和产生预期:
<形式的行动=/上传/上传ENCTYPE =的multipart / form-data的方法=后>
<&字段集GT;
选择一个文件<输入类型=文件名称=文件/>
<输入类型=提交值=上传/>
< /字段集>
< /表及GT;在另一方面,如果你正在写其他的服务器端的情况下这里面code构造,如
如果
或的foreach
应删除@
在使用
。例如:@if(SomeCondition)
{
使用(Html.BeginForm(上传,上传,FormMethod.Post,
新{ENCTYPE =的multipart / form-data的}))
{
@ Html.ValidationSummary(真)
<&字段集GT;
选择一个文件<输入类型=文件名称=文件/>
<输入类型=提交值=上传/>
< /字段集>
}
}至于你的服务器端code而言,这里是如何继续:
[HttpPost]
公众的ActionResult上传(HttpPostedFileBase文件)
{
如果(文件= NULL&放大器;!&安培; file.ContentLength大于0)
{
变种文件名= Path.GetFileName(file.FileName);
VAR路径= Path.Combine(使用Server.Mappath(〜/内容/图片),文件名);
file.SaveAs(路径);
}
返回RedirectToAction(上传);
}If I write like this:
form action="Images" method="post" enctype="multipart/form-data"
it works.
But in Razor with '@' it doesn't work. Did I make any mistakes?
@using (Html.BeginForm("Upload", "Upload", FormMethod.Post, new { enctype = "multipart/form-data" })) { @Html.ValidationSummary(true) <fieldset> Select a file <input type="file" name="file" /> <input type="submit" value="Upload" /> </fieldset> }
My controller looks like this:
[AcceptVerbs(HttpVerbs.Post)] public ActionResult Upload() { foreach (string file in Request.Files) { var uploadedFile = Request.Files[file]; uploadedFile.SaveAs(Server.MapPath("~/content/pics") + Path.GetFileName(uploadedFile.FileName)); } return RedirectToAction ("Upload"); }
解决方案The following code works fine:
@using (Html.BeginForm("Upload", "Upload", FormMethod.Post, new { enctype = "multipart/form-data" })) { @Html.ValidationSummary(true) <fieldset> Select a file <input type="file" name="file" /> <input type="submit" value="Upload" /> </fieldset> }
and generates as expected:
<form action="/Upload/Upload" enctype="multipart/form-data" method="post"> <fieldset> Select a file <input type="file" name="file" /> <input type="submit" value="Upload" /> </fieldset> </form>
On the other hand if you are writing this code inside the context of other server side construct such as an
if
orforeach
you should remove the@
before theusing
. For example:@if (SomeCondition) { using (Html.BeginForm("Upload", "Upload", FormMethod.Post, new { enctype = "multipart/form-data" })) { @Html.ValidationSummary(true) <fieldset> Select a file <input type="file" name="file" /> <input type="submit" value="Upload" /> </fieldset> } }
As far as your server side code is concerned, here's how to proceed:
[HttpPost] public ActionResult Upload(HttpPostedFileBase file) { if (file != null && file.ContentLength > 0) { var fileName = Path.GetFileName(file.FileName); var path = Path.Combine(Server.MapPath("~/content/pics"), fileName); file.SaveAs(path); } return RedirectToAction("Upload"); }
这篇关于如何写&QUOT; Html.BeginForm&QUOT;在剃刀的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!