Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 正在保存System.Web.HttpPostedFileWrapper字符串,而不是文件路径名_C#_Asp.net_Asp.net Mvc - Fatal编程技术网

C# 正在保存System.Web.HttpPostedFileWrapper字符串,而不是文件路径名

C# 正在保存System.Web.HttpPostedFileWrapper字符串,而不是文件路径名,c#,asp.net,asp.net-mvc,C#,Asp.net,Asp.net Mvc,这过去工作正常,但现在代码没有将路径名保存到SitePlan和SiteImage字段。如果我调试一切正常,并且SitePlan和SiteImage包含上传文件的路径名(即~/UploadedFiles/20110210104108SiteImage77.jpg)。但在SitePlan和SiteImage字段中保存后,字符串值“System.Web.HttpPostedFileWrapper” 由于它保存得很好,因此正在努力解决这一问题,并且正在监视和调试保存的值是路径名,因此没有错误,所有内容都

这过去工作正常,但现在代码没有将路径名保存到
SitePlan
SiteImage
字段。如果我调试一切正常,并且
SitePlan
SiteImage
包含上传文件的路径名(即~/UploadedFiles/20110210104108SiteImage77.jpg)。但在
SitePlan
SiteImage
字段中保存后,字符串值“System.Web.HttpPostedFileWrapper”

由于它保存得很好,因此正在努力解决这一问题,并且正在监视和调试保存的值是路径名,因此没有错误,所有内容都正常工作,只是数据库没有路径,只有字符串“System.Web.HttpPostedFileWrapper”。非常感谢您的任何意见

这是我的控制器代码:

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult SiteLocationEdit(int id, FormCollection collection)
{
    SiteLocation siteLocation = this._siteRepository.GetSite(Convert.ToInt16(collection["SiteId"])).SiteLocation;           

    if (Request.Files.Count > 0 && Request.Files["SitePlan"].ContentLength > 0)
    {
        DeleteFile(siteLocation.SitePlan);
        siteLocation.SitePlan = SaveFile(Request.Files["SitePlan"], @"~/UploadedFiles", "SitePlan" + siteLocation.SiteId.ToString());
    }

    if (Request.Files.Count > 0 && Request.Files["SiteImage"].ContentLength > 0)
    {
        DeleteFile(siteLocation.SiteImage);
        siteLocation.SiteImage = SaveFile(Request.Files["SiteImage"], @"~/UploadedFiles", "SiteImage" + siteLocation.SiteId.ToString());
    }

    TryUpdateModel(siteLocation);

    if (!ModelState.IsValid)
        return View(siteLocation);  


    this._siteRepository.Save(User.Identity.Name);
    return RedirectToAction("SiteLocationDetails", new { id = siteLocation.SiteId });                                   
}
protected String SaveFile(HttpPostedFileBase file, String path, string name)
{
    if (file != null && file.ContentLength > 0)
    {
        if (path == null)
        {
            throw new ArgumentNullException("path cannot be null");
        }

        string fileType = file.FileName.Substring(file.FileName.LastIndexOf("."), file.FileName.Length - file.FileName.LastIndexOf("."));

        String relpath = String.Format("{0}/{1}", path, PrefixFName(name + fileType));
        try
        {
            file.SaveAs(Server.MapPath(relpath));
            return relpath;
        }
        catch (HttpException e)
        {
            throw new ApplicationException("Cannot save uploaded file", e);
        }
    }
    return null;
}
这是我的视图,其中包含一个局部视图(将在本文后面显示)

以下是SiteLocationCreate(),这是有效的,只是编辑没有:

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult SiteLocationCreate(SiteLocation siteLocation, FormCollection collection)
{
    // TODO CF: Look into this line.  Is there a better way to do it?  I would think so.
    // It uses a hidden field in the object form
    Site site = this._siteRepository.GetSite(Convert.ToInt16(collection["SiteId"]));                        
    site.SiteLocation = siteLocation;

    if (Request.Files.Count > 0 && Request.Files["SitePlan"].ContentLength > 0)
    {
        DeleteFile(siteLocation.SitePlan);
        siteLocation.SitePlan = SaveFile(Request.Files["SitePlan"], @"~/UploadedFiles", "SitePlan" + siteLocation.SiteId.ToString());
    }

    if (Request.Files.Count > 0 && Request.Files["SiteImage"].ContentLength > 0)
    {
        DeleteFile(siteLocation.SiteImage);
        siteLocation.SiteImage = SaveFile(Request.Files["SiteImage"], @"~/UploadedFiles", "SiteImage" + siteLocation.SiteId.ToString());
    }

    if (!ModelState.IsValid)              
        return View(siteLocation);                            

    this._siteRepository.Save(User.Identity.Name);
    return RedirectToAction("SiteLocationDetails", new { id = site.SiteId });                                   
}

已删除TryUpdateModel()行及其工作状态。但是必须为每个字段更新逐行指定,即siteLocation.Location=collection[“Location”];等等。由于TryUpdateModel已取出

您能否显示
SaveFile()的代码
?我想这是你自己的代码。更新完成,添加了SaveFile(),加油,就是这样,这里疯了:-)奇怪的是SiteLocationCreate()工作正常,现在就发布我没有看到任何明显的会导致这种行为的东西。出于调试目的,您是否尝试过在
SaveFile()
调用之前或之后设置
siteLocation.SiteImage
的值,以查看数据库中保存了什么?在SaveFile()之后设置TryUpdateModel(),一旦代码移出TryUpdateModel(),它就更改了2个值,您已经弄明白了!
protected String SaveFile(HttpPostedFileBase file, String path, string name)
{
    if (file != null && file.ContentLength > 0)
    {
        if (path == null)
        {
            throw new ArgumentNullException("path cannot be null");
        }

        string fileType = file.FileName.Substring(file.FileName.LastIndexOf("."), file.FileName.Length - file.FileName.LastIndexOf("."));

        String relpath = String.Format("{0}/{1}", path, PrefixFName(name + fileType));
        try
        {
            file.SaveAs(Server.MapPath(relpath));
            return relpath;
        }
        catch (HttpException e)
        {
            throw new ApplicationException("Cannot save uploaded file", e);
        }
    }
    return null;
}
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult SiteLocationCreate(SiteLocation siteLocation, FormCollection collection)
{
    // TODO CF: Look into this line.  Is there a better way to do it?  I would think so.
    // It uses a hidden field in the object form
    Site site = this._siteRepository.GetSite(Convert.ToInt16(collection["SiteId"]));                        
    site.SiteLocation = siteLocation;

    if (Request.Files.Count > 0 && Request.Files["SitePlan"].ContentLength > 0)
    {
        DeleteFile(siteLocation.SitePlan);
        siteLocation.SitePlan = SaveFile(Request.Files["SitePlan"], @"~/UploadedFiles", "SitePlan" + siteLocation.SiteId.ToString());
    }

    if (Request.Files.Count > 0 && Request.Files["SiteImage"].ContentLength > 0)
    {
        DeleteFile(siteLocation.SiteImage);
        siteLocation.SiteImage = SaveFile(Request.Files["SiteImage"], @"~/UploadedFiles", "SiteImage" + siteLocation.SiteId.ToString());
    }

    if (!ModelState.IsValid)              
        return View(siteLocation);                            

    this._siteRepository.Save(User.Identity.Name);
    return RedirectToAction("SiteLocationDetails", new { id = site.SiteId });                                   
}