如何写" Html.BeginForm"在剃刀 [英] How to write "Html.BeginForm" in Razor

查看:169
本文介绍了如何写" Html.BeginForm"在剃刀的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如果我写的是这样的:


  

形式的行动=图像方法=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 or foreach you should remove the @ before the using. 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屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆