问题
I need to add the following field at my form
<input type="file" class="input-file" />
I create model and describe this field (the last field)
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; }
}
}
and create
@Html.TextBox(null, null, new { type="file", @class="input-file" })
but it doesnt work, I get some exception. What's wrong?
回答1:
Model
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; }
}
View
@model FeedbackForm
@Html.TextBox("Name")
@Html.TextBox("Email")
...
@Html.TextBox("ProjectInformation", null, new { type="file", @class="input-file" })
// submit button
My recommended view (strongly - typed)
@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
Controller
[HttpPost]
public ActionResult FeedbackForm(FeedbackForm model)
{
// this is your uploaded file
var file = model.ProjectInformation;
...
return View();
}
MVC is using name convention, so if your textbox and model names match, then MVC will bind your inputs to your model.
回答2:
I think you are getting a null because you have not specified the enctype in your form tag.
@using (Html.BeginForm("ActionMethodName", "Controller", FormMethod.Post, new { enctype = "multipart/form-data" })) { }
A working example always help.
Visit http://www.mindstick.com/Articles/cf1e1dd9-fdba-4617-94f0-407223574447/?Upload%20File%20in%20Asp.Net%20Mvc%204
回答3:
You can use the below syntax
@Html.TextBoxFor(model=>model.Email, new { @type="file", @class="input-file" })
回答4:
I solved this problem using enctype="multipart/form-data"
@using (Html.BeginForm("SalvarEvidencia", "Evidencia", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
...
}
回答5:
There's nothing wrong with just using the input tag directly in your view. You aren't required to use a helper.
<input type="file" class="input-file" />
Just make sure it's within your BeginForm declaration block.
回答6:
You need to specify the name of the field. If you don't want a name, nor a value, it's better to just include the field as is in your form.
It doesn't make sense to use a helper, if there's nothing dynamic about it.
回答7:
@using (Html.BeginForm("Action_Name", "Controller_Name",FormMethod.Post))
{
@Html.TextBoxFor(m => m.Email, new {@class = "text_field"})
@Html.ValidationMessageFor(m => m.Email)
}
来源:https://stackoverflow.com/questions/16644639/how-to-create-mvc-4-html-textbox-type-file