Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.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
Asp.net mvc 3 asp.net mvc 3-将文件上载到服务器I can';t将文件名保存到数据库模型_Asp.net Mvc 3_File Upload_Model - Fatal编程技术网

Asp.net mvc 3 asp.net mvc 3-将文件上载到服务器I can';t将文件名保存到数据库模型

Asp.net mvc 3 asp.net mvc 3-将文件上载到服务器I can';t将文件名保存到数据库模型,asp.net-mvc-3,file-upload,model,Asp.net Mvc 3,File Upload,Model,这有什么问题吗 看法 @model GestionWeb.DAL.Client @使用(Html.BeginForm(“Index”,“Config”,FormMethod.Post,new{enctype=“multipart/formdata”})) { @LabelFor(model=>model.TimeZone) @EditorFor(model=>model.TimeZone) @Html.ValidationMessageFor(model=>model.TimeZone) @Ht

这有什么问题吗

看法

@model GestionWeb.DAL.Client
@使用(Html.BeginForm(“Index”,“Config”,FormMethod.Post,new{enctype=“multipart/formdata”}))
{
@LabelFor(model=>model.TimeZone)
@EditorFor(model=>model.TimeZone)
@Html.ValidationMessageFor(model=>model.TimeZone)
@Html.HiddenFor(model=>model.ClientId)
@LabelFor(model=>model.Logo)
@Html.ValidationMessageFor(model=>model.Logo)
}
控制器:

[HttpPost]
public ActionResult Index(Client client)
{
    if (ModelState.IsValid)
    {
        if (Request.Files[0].ContentLength > 0)
        {
            HttpPostedFileBase file = Request.Files[0];
            string filePath = Path.Combine(HttpContext.Server.MapPath("/Upload/"), Path.GetFileName(file.FileName));
            file.SaveAs(filePath);
            client.Logo = file.FileName;
        }
        db.Client.Attach(client);
        UpdateModel<Client>(client);
        //db.ObjectStateManager.ChangeObjectState(client, EntityState.Modified);
        db.SaveChanges();

        return RedirectToAction("Index");
     }
     return View(client);
}
[HttpPost]
公共行动结果索引(客户端)
{
if(ModelState.IsValid)
{
if(Request.Files[0].ContentLength>0)
{
HttpPostedFileBase file=Request.Files[0];
字符串filePath=Path.Combine(HttpContext.Server.MapPath(“/Upload/”),Path.GetFileName(file.FileName));
file.SaveAs(文件路径);
client.Logo=file.FileName;
}
db.Client.Attach(客户);
更新模型(客户端);
//db.ObjectStateManager.ChangeObjectState(客户端,EntityState.Modified);
db.SaveChanges();
返回操作(“索引”);
}
返回视图(客户端);
}
我可以写这个文件,但文件名并没有保存到数据库中,我并没有收到错误,我可以更新时区字段(以及其他许多字段)

我做错了什么?我搞不懂


谢谢

您应该自己生成一个新的有效文件名。对于您的问题,它不太容易出错。它将避免安全问题

例如,可以使用string.Format()生成文件名:

string myGeneratedFileName=string.Format(“客户端徽标-{0}”,Guid.NewGuid()); 字符串filePath=Path.Combine(HttpContext.Server.MapPath(“/Upload/”),myGeneratedFileName); file.SaveAs(文件路径); client.Logo=myGeneratedFileName


顺便说一句,您可能希望处理
file.SaveAs()上的异常。您应该自己生成一个新的有效文件名。对于您的问题,它不太容易出错。它将避免安全问题

例如,可以使用string.Format()生成文件名:

string myGeneratedFileName=string.Format(“客户端徽标-{0}”,Guid.NewGuid()); 字符串filePath=Path.Combine(HttpContext.Server.MapPath(“/Upload/”),myGeneratedFileName); file.SaveAs(文件路径); client.Logo=myGeneratedFileName


顺便说一句,您可能希望处理
file.SaveAs()上的异常情况

如果只保存名称,那么可能是数据模型有问题。能否检查
徽标
属性是否映射到有效列?您可以尝试删除并重新添加设计器中的表以更新映射信息。

如果只保存名称,则可能是数据模型有问题。能否检查
徽标
属性是否映射到有效列?您可以尝试删除并重新添加设计器中的表以更新映射信息。

我发现了问题,client.Logo=“blablabla”必须在UpdateModel方法之后,我不知道为什么,因为如果我调试代码,客户端。我设置的Logo值在UpdateModel执行后不会被擦除,如下所示:

[HttpPost]
public ActionResult Index(Client client)
{
    if (ModelState.IsValid)
    {
        if (Request.Files[0].ContentLength > 0)
        {
            HttpPostedFileBase file = Request.Files[0];
            string filePath = Path.Combine(HttpContext.Server.MapPath("/Upload/"), Path.GetFileName(file.FileName));
            file.SaveAs(filePath);
        }
        db.Client.Attach(client);
        UpdateModel<Client>(client);
        **client.Logo = file.FileName;**
        db.SaveChanges();

       return RedirectToAction("Index");
     }
     return View(client);
}
[HttpPost]
公共行动结果索引(客户端)
{
if(ModelState.IsValid)
{
if(Request.Files[0].ContentLength>0)
{
HttpPostedFileBase file=Request.Files[0];
字符串filePath=Path.Combine(HttpContext.Server.MapPath(“/Upload/”),Path.GetFileName(file.FileName));
file.SaveAs(文件路径);
}
db.Client.Attach(客户);
更新模型(客户端);
**client.Logo=file.FileName**
db.SaveChanges();
返回操作(“索引”);
}
返回视图(客户端);
}

我发现了问题,client.Logo=“blabla”必须在UpdateModel方法之后,我不知道为什么,因为如果我调试代码,那么在执行UpdateModel后,客户端的.Logo值不会被删除,如下所示:

[HttpPost]
public ActionResult Index(Client client)
{
    if (ModelState.IsValid)
    {
        if (Request.Files[0].ContentLength > 0)
        {
            HttpPostedFileBase file = Request.Files[0];
            string filePath = Path.Combine(HttpContext.Server.MapPath("/Upload/"), Path.GetFileName(file.FileName));
            file.SaveAs(filePath);
        }
        db.Client.Attach(client);
        UpdateModel<Client>(client);
        **client.Logo = file.FileName;**
        db.SaveChanges();

       return RedirectToAction("Index");
     }
     return View(client);
}
[HttpPost]
公共行动结果索引(客户端)
{
if(ModelState.IsValid)
{
if(Request.Files[0].ContentLength>0)
{
HttpPostedFileBase file=Request.Files[0];
字符串filePath=Path.Combine(HttpContext.Server.MapPath(“/Upload/”),Path.GetFileName(file.FileName));
file.SaveAs(文件路径);
}
db.Client.Attach(客户);
更新模型(客户端);
**client.Logo=file.FileName**
db.SaveChanges();
返回操作(“索引”);
}
返回视图(客户端);
}

不是答案,但请参阅:-如果您关心安全停止,使用用户为您保存的文件提供的文件名。谢谢,我会考虑这些风险,但是那个页面不能解决我的问题,不是答案而是请看这个:-如果你关心安全停止,使用用户给你保存的文件的文件名。谢谢,我会考虑这些风险,但是那个页面不能解决我的问题。谢谢,但是我的问题是把名字保存到数据库中。如果我使用
client.Logo=“myfile”也不起作用。谢谢,但我的问题是将名称保存到数据库中。如果我使用
client.Logo=“myfile”
也不起作用。我发现了问题,
client.Logo=“blabla”
必须在
UpdateModel
方法之后,我不知道为什么,因为如果我调试代码,我设置的
client.Logo
值在执行
UpdateModel
后不会被删除,那么您应该为自己的问题添加一个答案并将其标记为有效:)我发现了问题,
client.Logo=“blablabla”
必须在
UpdateModel
方法之后,我不知道为什么,因为如果我调试代码,在执行
UpdateModel
之后,我设置的
client.Logo
值不会被擦除,那么您应该添加