6

私はそのようなデータモデルを持っています

    public class NewsItem
{
    public virtual int Id { get; set; }
    public virtual string NewsTitle { get; set; }
    public virtual string NewsContent { get; set; }
    public virtual byte[] NewsImage { get; set; }
    public virtual DateTime DateAdded { get; set; }
    public virtual bool IsLive { get; set; }
}

次に、次のようにビューを介してこのデータを表示します。

@model BusinessObject.Domain.NewsItem
<div class="row-fluid">
    <h3>
        @Html.ValueFor(model => model.NewsTitle)
    </h3>
    <div class="span5">
    <img src="~/Content/images/stock.jpg" />
    </div>

<div class="span7">
<p>
    @Html.ValueFor(model => model.DateAdded)
</p>
<p>
    @Html.ValueFor(model => model.NewsContent)
</p>
</div>
 </div>

次に、次のようにコントローラーで _db.SaveChanges() を使用してデータを保存します。

[Authorize]
    [HttpPost]
    public ActionResult Create(CreateNewsViewModel input)
    {
        if (ModelState.IsValid)
        {
            var news = new NewsItem();
            news.NewsTitle = input.nTitle;
            news.NewsContent = input.nContent;
            news.DateAdded = input.nDateAdded;
            news.IsLive = input.nIsLive;
            Mydb data = new Mydb();
            data.NewsItems.Add(news);
            data.SaveChanges();
            return View("Index", data.NewsItems);

        }
        else
        {
            return View(input);
        }
    }

現在、画像のアップロード ビットはありません。これについてどうすればいいですか?私のデータベースにはバイナリ フィールドがあり、オブジェクトのデータ型は byte[] です。しかし、画像のアップロードをどこで処理する必要があるのか​​ わかりません。

ビューを返す別のアクションが必要ですか? これに関するいくつかの指針は壮大です。

乾杯

4

3 に答える 3

9

ビューからアップロードするファイル タイプの入力フィールドと、アップロードされた画像を処理する WebImage のインスタンスが必要です。

意見:

<input type="file" name="image" />

コントローラ:

WebImage image = WebImage.GetImageFromRequest();
byte[] toPutInDb = WebImage.GetBytes();

// ... put the byte array into the database

データベースから画像を表示するには、データベースからバイト配列を取得して FileAction を返すコントローラー アクションが必要です。データベースから取得した bytearray で別の WebImage インスタンスをインスタンス化することにより、この画像を取得できます (画像取得コントローラー アクション用)。

WebImage image = new WebImage(byteArrayFromDb);

File(image.GetBytes(), "image/" + image.ImageFormat, image.FileName);
于 2013-03-27T15:19:12.370 に答える
3

私はこのように行きます:

あなたのモデルクラスで:

 public class NewsItem
{
    public virtual int Id { get; set; }
    public virtual string NewsTitle { get; set; }
    public virtual string NewsContent { get; set; }
    public virtual string NewsImage { get; set; } //string instead of byte because you don't wanna store your whole image file in your database, but just the path of the image, and the image you will store in a folder somewhere on the server
    public virtual DateTime DateAdded { get; set; }
    public virtual bool IsLive { get; set; }
}

あなたのコントローラーで:

[Authorize]
    [HttpPost]
    public ActionResult Create(CreateNewsViewModel HttpPostedFileBase file)// add this 
    {
        if (ModelState.IsValid)
        {
            if (file != null)
            {
                file.SaveAs(HttpContext.Server.MapPath("~/Images/") + file.FileName);
                car.ImagePath = file.FileName;
            }
        // the rest of the code... 

        }
        else
        {
            return View(input);
        }
    }

次に、ビューに次のものが必要です。

アップロード用:

<input id="NewsImage" title="Upload a image" type="file" name="file" />

foreach サイクルで表示するには、次を追加します。

@Html.DisplayFor(modelItem => item.NewsImage)

enctype = "multipart/form-data"を追加することを忘れないでくださいHtml.BeginForm

これが役立つことを願っています。

于 2013-06-17T08:22:11.520 に答える
1

jquery file uploaderを見てください。サンプルコードを 見つけることができます

お役に立てれば

于 2013-03-27T21:14:33.960 に答える