Asp.net mvc 将上传文件的链接存储在mvc3的数据库中

Asp.net mvc 将上传文件的链接存储在mvc3的数据库中,asp.net-mvc,asp.net-mvc-3,sql-server-2008-r2,Asp.net Mvc,Asp.net Mvc 3,Sql Server 2008 R2,我想在我的数据库中存储上传文件的链接。 我正在使用FileUpload控件 但我无法存储浏览过的url 我是mvc新手 请任何人帮帮我 以下是我尝试过的: //Inside Model public class Hobbies { public int Id { get; set; } public string hobbiename { get; set; } public string filelocation { get; set; } public str

我想在我的数据库中存储上传文件的链接。 我正在使用FileUpload控件 但我无法存储浏览过的url 我是mvc新手 请任何人帮帮我 以下是我尝试过的:

//Inside Model
public class Hobbies
{
    public int Id { get; set; }
    public string hobbiename { get; set; }
    public string filelocation { get; set; }
    public string hobbydetail { get; set; }
}

//inside Controller action method create
 [HttpPost]
    public ActionResult Create(Hobbies hobbies,HttpPostedFileBase file)
    {
        var r = new List<Hobbies>();
        if (file != null && file.ContentLength > 0)
        {
            // extract only the fielname 
            var fileName = Path.GetFileName(file.FileName);
            // store the file inside ~/App_Data/uploads folder 
            var path = Path.Combine(Server.MapPath("~/App_Data/uploads"), fileName);
            file.SaveAs(path);
        }

        if (ModelState.IsValid)
        {
            db.hobby.Add(hobbies);
            db.SaveChanges();
            return RedirectToAction("Index");  
        }

        return View(hobbies);
    }
//inside Create.cshtml
@model MVCUpload4.Models.Hobbies

@{
ViewBag.Title = "Create";
 }

<h2>Create</h2>

<script src="@Url.Content("~/Scripts/jquery.validate.min.js")"     type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>

@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
    <legend>Hobbies</legend>

    <div class="editor-label">
        @Html.LabelFor(model => model.hobbiename)
    </div>
    <div class="editor-field">
        @Html.EditorFor(model => model.hobbiename)
        @Html.ValidationMessageFor(model => model.hobbiename)
    </div>

    <div class="editor-label">
        @Html.LabelFor(model => model.filelocation) 
     <input type="file" name="file"/> 

    </div>
    <div class="editor-label">
        @Html.LabelFor(model => model.hobbydetail)
    </div>
    <div class="editor-field">
        @Html.EditorFor(model => model.hobbydetail)
        @Html.ValidationMessageFor(model => model.hobbydetail)
    </div>

    <p>
        <input type="submit" value="Create" />
    </p>
</fieldset>
}

<div>
@Html.ActionLink("Back to List", "Index")
</div>
//内部模型
公共课爱好
{
公共int Id{get;set;}
公共字符串HOBIENAME{get;set;}
公共字符串文件位置{get;set;}
公共字符串hobbydeail{get;set;}
}
//内部控制器动作方法创建
[HttpPost]
公共操作结果创建(兴趣爱好、HttpPostedFileBase文件)
{
var r=新列表();
如果(file!=null&&file.ContentLength>0)
{
//只提取fielname
var fileName=Path.GetFileName(file.fileName);
//将文件存储在~/App_Data/uploads文件夹中
var path=path.Combine(Server.MapPath(“~/App\u Data/uploads”),文件名);
file.SaveAs(路径);
}
if(ModelState.IsValid)
{
db.hobby.Add(嗜好);
db.SaveChanges();
返回操作(“索引”);
}
返回视图(兴趣爱好);
}
//内部Create.cshtml
@型号MVCUpload4.Models.Habiots
@{
ViewBag.Title=“创建”;
}
创造
@使用(Html.BeginForm()){
@Html.ValidationSummary(true)
业余爱好
@LabelFor(model=>model.hobbiename)
@EditorFor(model=>model.hobbiename)
@Html.ValidationMessageFor(model=>model.hobbiename)
@LabelFor(model=>model.filelocation)
@LabelFor(model=>model.hobbydeail)
@EditorFor(model=>model.hobbydeail)
@Html.ValidationMessageFor(model=>model.hobbydeail)

} @ActionLink(“返回列表”、“索引”)
我知道里面有很多错误。。 但是请你经历一下。。
我真的不理解它

据我所知,无法直接获取
App_Data
文件夹中文件的URL(该文件夹受到保护,因此可以保存例如数据库文件)。您需要将其上载到另一个文件夹(例如,
~/Uploads
)。然后您可以像这样构建URL:
stringURL=”http://yourwebsite.com/Uploads/“+文件名并将其存储在模型中