图像文件从视图上传到控制器参数,在调试中返回null

时间:2015-05-19 14:48:18

标签: c# asp.net-mvc database image upload

我正在尝试从用户文件上传图像,并以byte []格式将其保存到数据库中。我已经尝试了很多教程并且已经搜索了但是我尝试过的所有内容都没有解决我的问题。

问题:当我调试项目以便将图像从视图传递到控制器时,文件每次都保持为空。

这是我的代码:

查看

@using (Html.BeginForm("Create", "Events", new { enctype = "multipart/form-data" }, FormMethod.Post, null))
  {
    <div class="form-group">
        <div class="col-md-10">
            @Html.DisplayName("Image")

            <input type="file" name="file" id="file" style="width: 100%;" />

        </div>
    </div>
}

控制器

[HttpPost]          
public ActionResult Create(AddEventViewModel addviewmodel, HttpPostedFileBase file)
{
    if (ModelState.IsValid)
    {
        string filename = "";
        byte[] bytes;
        int BytestoRead;
        int numBytesRead;

        if(file != null)
        {
            filename = Path.GetFileName(file.FileName);
            bytes = new byte[file.ContentLength];
            BytestoRead = (int)file.ContentLength;
            numBytesRead = 0;

            while(BytestoRead > 0)
            {
                int n = file.InputStream.Read(bytes, numBytesRead, BytestoRead);
                if (n == 0) break;

                numBytesRead += n;
                BytestoRead -= n;
            }

            addviewmodel.Event_Image = bytes;
        }

        var e = new Event();
        var ep = new EventPerformance();

        UpdateEvent(e, addviewmodel);

        db.Event.Add(e);
        db.SaveChanges();
        return RedirectToAction("Index");
    }

    return View(addviewmodel);
}

值得注意的是,我正在使用View Models。

2 个答案:

答案 0 :(得分:0)

您的htmlAttributes位于错误的位置 - 应该是:

DECLARE @STARTDATE DATETIME
DECLARE @ENDDATE DATETIME

SET @STARTDATE = GETDATE()
SET @ENDDATE = '2015-12-31'

WHILE @STARTDATE < @ENDDATE
    BEGIN
        SELECT EOMONTH(@STARTDATE)
        SET @STARTDATE = DATEADD(M,+1,@STARTDATE)
    END

请参阅:MSDN了解更多

答案 1 :(得分:0)

对于任何发现这个并且遇到同样问题的人,我终于找到了我的错误。我正在使用部分视图,错误地在两个视图中都有2个@using(Html.BeginForm)....一旦我删除了其中一个,它就完美了。