11

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

<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" })

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

4

7 回答 7

16

模型

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 会将您的输入绑定到您的模型。

于 2013-05-20T07:56:45.730 回答
5

我认为你得到一个空值,因为你没有在你的表单标签中指定 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

于 2014-09-04T07:06:00.580 回答
3

您可以使用以下语法

@Html.TextBoxFor(model=>model.Email, new { @type="file", @class="input-file" })
于 2014-04-18T17:20:09.620 回答
2

我使用解决了这个问题enctype="multipart/form-data"

@using (Html.BeginForm("SalvarEvidencia", "Evidencia", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
    ...
}
于 2015-12-17T16:14:02.253 回答
1

直接在视图中使用输入标签没有任何问题。您不需要使用助手。

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

只要确保它在您的 BeginForm 声明块内。

于 2013-05-20T07:58:16.513 回答
0

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

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

于 2013-05-20T07:38:25.593 回答
-1
  @using (Html.BeginForm("Action_Name", "Controller_Name",FormMethod.Post))
   {
        @Html.TextBoxFor(m => m.Email, new {@class = "text_field"})
        @Html.ValidationMessageFor(m => m.Email)
   }
于 2015-10-21T12:45:04.613 回答