MVC 4文件上传不起作用

时间:2013-05-03 11:33:17

标签: file-upload asp.net-mvc-4 null httppostedfilebase

我正在尝试简单地上传图像,但我控制器中的HttpPostedFileBase始终保持为空。

以下是页面:

<% using(Html.BeginForm("AddPicture","Album",FormMethod.Post,new{enctype=  "multipart/form-data" }))
{ %>
<%: Html.ValidationSummary(true) %>

<fieldset>
    <legend>PictureModel</legend>

    <div class="editor-label">
        <%: Html.LabelFor(model => model.PrivacyTypeID) %>
    </div>
    <div class="editor-field">
        <%: Html.DropDownList("PrivacyTypeID", null, new { name = "PrivacyTypeID", title = "Please select privacy type.", id = "PrivacyTypeID" }) %>
        <%: Html.ValidationMessageFor(model => model.PrivacyTypeID) %>
    </div>
    <div>
        Upload Image: <input type="file" name="File1" />
    </div>        
    <p>
        <input type="submit" value="Create" />
    </p>
</fieldset>

以下是该页面的控制器:

[HttpPost]
    public ActionResult AddPicture(Guid id, PictureModel model, HttpPostedFileBase File1)
    {
        try
        {

            if (ModelState.IsValid)
            {
                var file = Request.Files[0];
                try
                {
                    Guid albumid = id;

                    if (File1 != null)
                    {

.....

任何人都可以指导我有什么问题吗?我尝试了一切,但没有结果

2 个答案:

答案 0 :(得分:0)

更改此行:

Upload Image: <input type="file" name="File1" id="File1" />

并改变这一点:

public ActionResult AddPicture(Guid id, PictureModel model, HttpPostedFile File1)

答案 1 :(得分:0)

这里要注意的一些事情可能是错误的,或者没有正确的方法:

  1. 应该设置表单中的Guid id在哪里。 Html.Hidden(yourid);Html.HiddenFor(model => model.id);&lt; - 确保先将模型设置为后者,例如:

    public ActionResult Index(){
        PictureModel p = new PictureModel();
        p.id = Guid.NewGuid();
        return View(p);
    }
    
  2. 对dropdownList使用正确的方法,你的映射也是错误的:

      
  3. 正确的方法是使用:

     DropDownListFor(model => model.PrivacyTypeID, model => model.selectListOfPrivacyTypes, "-- Select Privacy Type --");
    

    如果你确实想使用dropdownlist方法,那么你应该使用名称PictureModel.PrivacyTypeID代替PrivacyTypeID来让映射正常工作

    我不确定它是否会解决文件处理为null的问题,但它肯定会是更好的代码。