如何创建MVC 4 @ Html.TextBox type =“file”?

时间:2013-05-20 07:30:53

标签: asp.net-mvc asp.net-mvc-4

我需要在表单中添加以下字段

<input type="file" class="input-file" />

我创建模型并描述这个字段(最后一个字段)

 using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Web;

 namespace CorePartners_Site2.Models
 {
     public class FeedbackForm
     {
    public string Name { get; set; }
    public string Email { get; set; }
    public string Phone { get; set; }
    public string Company { get; set; }
    public string AdditionalInformation { get; set; }
    public HttpPostedFileBase ProjectInformation { get; set; }
     }
 }

并创建

@Html.TextBox(null, null, new { type="file", @class="input-file" })

但它不起作用,我得到一些例外。 怎么了?

7 个答案:

答案 0 :(得分:14)

模型

public class FeedbackForm
{
    public string Name { get; set; }
    public string Email { get; set; }
    public string Phone { get; set; }
    public string Company { get; set; }
    public string AdditionalInformation { get; set; }
    public HttpPostedFileBase ProjectInformation { get; set; }
}

查看

@model FeedbackForm

@Html.TextBox("Name")
@Html.TextBox("Email")
...
@Html.TextBox("ProjectInformation", null, new { type="file", @class="input-file" })

// submit button

我的推荐视图(强类型)

@model FeedbackForm

@Html.TextBoxFor(model=>model.Name)
@Html.TextBoxFor(model=>model.Email)
...
@Html.TextBoxFor(model=>model.ProjectInformation, null, new { type="file", @class="input-file" })

// submit button

控制器

[HttpPost]
public ActionResult FeedbackForm(FeedbackForm model)
{
    // this is your uploaded file
    var file = model.ProjectInformation;
    ...

    return View();
}

MVC正在使用名称约定,因此如果您的文本框和模型名称匹配,则MVC会将您的输入绑定到您的模型。

答案 1 :(得分:4)

我认为你得到的是null,因为你没有在表单标签中指定enctype。

@using(Html.BeginForm(“ActionMethodName”,“Controller”,FormMethod.Post,new {enctype =“multipart / form-data”}))  { }

一个有效的例子总是有帮助的。

访问http://www.mindstick.com/Articles/cf1e1dd9-fdba-4617-94f0-407223574447/?Upload%20File%20in%20Asp.Net%20Mvc%204

答案 2 :(得分:3)

您可以使用以下语法

@Html.TextBoxFor(model=>model.Email, new { @type="file", @class="input-file" })

答案 3 :(得分:1)

在视图中直接使用输入标记没有任何问题。您不需要使用帮助程序。

<input type="file" class="input-file" />

确保它在您的BeginForm声明块中。

答案 4 :(得分:1)

我使用enctype="multipart/form-data"

解决了这个问题
@using (Html.BeginForm("SalvarEvidencia", "Evidencia", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
    ...
}

答案 5 :(得分:0)

您需要指定字段的名称。如果您不想要名称或值,最好只在表单中包含该字段。

使用助手是没有意义的,如果没有任何动态的话。

答案 6 :(得分:-1)

  @using (Html.BeginForm("Action_Name", "Controller_Name",FormMethod.Post))
   {
        @Html.TextBoxFor(m => m.Email, new {@class = "text_field"})
        @Html.ValidationMessageFor(m => m.Email)
   }