SORU
24 Ocak 2011, PAZARTESİ


MVC 3 upload ve model bağlama dosyası

Çalışan bir form yüklenme var ama benim veritabanı için model bilgi aktarmak için elbette farklı bir adla dosyayı kaydetmek istiyorum.

Burada Jilet benim görüşüm:

@model CertispecWeb.Models.Container

@{
  ViewBag.Title = "AddDocuments";
}

<h2>AddDocuments</h2>

@Model.ContainerNo

@using (Html.BeginForm("Uploadfile", "Containers", FormMethod.Post, 
            new { enctype = "multipart/form-data" }))
{
    <input type='file' name='file' id='file' />
    <input type="submit" value="submit" />
}

İşte benim Denetleyicisi:

[HttpPost]
public ActionResult Uploadfile(Container containers, HttpPostedFileBase file)
{
     if (file.ContentLength > 0)
     {
        var fileName = Path.GetFileName(file.FileName);
        var path = Path.Combine(Server.MapPath("~/App_Data/Uploads"),
                       containers.ContainerNo);
        file.SaveAs(path);
     }

     return RedirectToAction("Index");
}

Model bilgi denetleyiciye aktarılır. Modeli güncellemek gerek diye okudum, nasıl böyle bir şey yapar mıyım ?

CEVAP
24 Ocak 2011, PAZARTESİ


Formunuzu değil içeren herhangi bir giriş etiketi dışında dosyayı yani senin denetleyicisi eylem yapamazsınız girmeyi her şeyden çok yüklenen dosya (hepsi bu gönderilen sunucu). Bir şekilde ulaşmak bunun için vardır bir gizli etiketi içeren kimlik modeli sağlayacak al bu senin içinde veri depolama denetleyici eylem kayıt için (bu kullanıcı değil sözde değiştirin modeli ama sadece bir dosya ekleyin):

@using (Html.BeginForm("Uploadfile", "Containers", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
    @Html.HiddenFor(x => x.Id)
    <input type="file" name="file" id="file" />
    <input type="submit" value="submit" />
}

ve denetleyici eylem sonra:

[HttpPost]
public ActionResult Uploadfile(int id, HttpPostedFileBase file)
{
    Containers containers = Repository.GetContainers(id);
    ...
}

Diğer taraftan eğer istediğin için izin kullanıcı değiştir bu model, daha sonra ihtiyacınız olacak dahil etmek için uygun giriş alanları için her alan model olmak istiyorsun gönderilen sunucusu:

@using (Html.BeginForm("Uploadfile", "Containers", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
    @Html.TextBxFor(x => x.Prop1)
    @Html.TextBxFor(x => x.Prop2)
    @Html.TextBxFor(x => x.Prop3)
    <input type="file" name="file" id="file" />
    <input type="submit" value="submit" />
}

ve sonra varsayılan model binder isteği bu modeli yeniden oluşturmak zorunda kalacak:

[HttpPost]
public ActionResult Uploadfile(Container containers, HttpPostedFileBase file)
{
    ...
}

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Jeremy Gallman

    Jeremy Gallm

    11 NİSAN 2012
  • Professor Messer

    Professor Me

    27 NİSAN 2007