質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

MVC

MVC(Model View Controller)は、オブジェクト指向プログラミングにおけるモデル・ビュー・コントローラーの総称であり、ソフトフェア開発で使われている構築パターンとしても呼ばれます。

.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

ASP.NET MVC Framework

ASP.NET MVC Frameworkは、MVCパターンをベースとした、マイクロソフトのウェブアプリケーション開発用のフレームワークです。

解決済

データベースの特定の一部分だけ変更したくない場合の対処を教えてください

Aburamusi101064
Aburamusi101064

総合スコア2

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

MVC

MVC(Model View Controller)は、オブジェクト指向プログラミングにおけるモデル・ビュー・コントローラーの総称であり、ソフトフェア開発で使われている構築パターンとしても呼ばれます。

.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

ASP.NET MVC Framework

ASP.NET MVC Frameworkは、MVCパターンをベースとした、マイクロソフトのウェブアプリケーション開発用のフレームワークです。

1回答

0評価

1クリップ

480閲覧

投稿2021/11/20 14:57

編集2021/11/21 00:25

前提・実現したいこと

VisualStudioのMVCを使ってWEBページを作っています。使用言語はC#とhtmlです。
ブラウザの中で画像の添付を行って、ブラウザでその添付した画像を表示させています。ブラウザでは画像以外にも入力フォームが実装されていて、その中に添付された画像が表示されています。

発生している問題・エラーメッセージ

入力内容の保存をするときに、画像に変更がなかった場合も入力フォームに変更があればその部分だけでも保存したいのですが、そのまま保存すると元々あった画像が消えてしまいます。

該当のソースコード

Model public string PhotoName { get; set; } public byte[] PhotoContent { get; set; } [Display(Name = "写真1")] public byte[] Thumbnail { get; set; } public DateTime? TimeStamp { get; set; } [Display(Name = "写真2")] public string tenpu { get; set; }
Viewのhtmlで使用している主なコード @using (Html.BeginForm("Edit", "sinkis", FormMethod.Post, new { enctype = "multipart/form-data" })) <div class="form-group"> @Html.LabelFor(model => model.tenpu, htmlAttributes: new { @class = "control-label col-md-2" }) @Html.TextBox("data", "", new { type = "file", size = 20 }) </div>
controllerのC# public ActionResult Edit([Bind(Include = "Id,input,Photoname.PhotoContent,Thumbnail,TimeStamp,tenpu,sinseibi,uketukeNO,data")] sinki sinki, HttpPostedFileBase data) { if (ModelState.IsValid) { db.Entry(sinki).State = EntityState.Modified; db.SaveChanges(); //return RedirectToAction("Index"); } // //写真 if (ModelState.IsValid) { //ここに6行のif文追加予想 if(data == null) { db.sinki.Add(sinki); db.SaveChanges(); return RedirectToAction("Edit"); } var fileName = data.FileName; if (fileName.Length > 50) { fileName = fileName.Substring(0, 50); } //拡張子チェック var permit = new string[] { ".jpg", "jpeg", ".png", ".gif" }; if (!permit.Contains(Path.GetExtension(fileName.ToLower()))) { ViewBag.Message = "jpg, jpeg, png, gif以外のファイルはアップロードできません"; return View(); } //※SQLServerに保存 using (var reader = new BinaryReader(data.InputStream)) { var byteData = reader.ReadBytes(data.ContentLength); //サムネイル取得用にイメージに戻す System.Drawing.ImageConverter imgconv = new ImageConverter(); Image img = (Image)imgconv.ConvertFrom(byteData); int[] pils = img.PropertyIdList; int index = Array.IndexOf(pils, 0x501b); // サムネイル・データ if (index == -1) { // サムネイルの作成 Image thumbnail = img.GetThumbnailImage(160, 120, delegate { return false; }, IntPtr.Zero); // サムネイルの保存 sinki.Thumbnail = (byte[])imgconv.ConvertTo(thumbnail, typeof(byte[])); thumbnail.Dispose(); } else { // サムネイル・データの取得 PropertyItem pi = img.PropertyItems[index]; byte[] jpgBytes = pi.Value; sinki.Thumbnail = jpgBytes; } img.Dispose(); sinki.PhotoContent = byteData; } sinki.PhotoName = fileName; db.sinki.Add(sinki); db.SaveChanges(); } return View(sinki); }

試したこと

dataがnullな状態でもそれ以外を保存できればと思い、6行のif文を入れてみたのですが、これだけだと、画像がnullのままになってしまいますが、どう記述すればいいのかイメージが湧きません。もしくは根本的な考えが間違っているのでしょうか。
if(data == null)
{
db.sinki.Add(sinki);
db.SaveChanges();
return RedirectToAction("Edit");
}

開発環境

Microsoft Visual Studio2019
.NET Framework

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

SurferOnWww

2021/11/20 15:11

まず、何はともあれ、コードは ``` と ``` で囲ってください (``` はバッククオート 3 つ)。インデントされて見易くなるので。 それから開発環境を書いてください。
Aburamusi101064

2021/11/20 15:37

コメントありがとうございます。初めての利用でしたのでインデントを知りませんでした。活用します。
SurferOnWww

2021/11/20 23:31 編集

開発環境としては、DB は何なのかとそのバージョン、Core か .NET Framework どっちかと、そのバージョンも書いてください。 DB のテーブルの構造を書いてください。 アップされたコードは断片的で重要なところが書かれてないし、逆に問題に関係無さそうな余計なところもあって、話が伝わらないです。 今のコードをそのまま貼ると長くなりすぎるのでそうしたと思いますが、であれば、問題を再現できる必要最低の簡単なサンプルを作って、Model, View, Controller のコードをすべて載せてください。そして、問題を再現する手順を書いてください。
SurferOnWww

2021/11/21 00:41

上のコメントを受けて質問を編集したようですが、話が伝わってますか? 依頼されたことに答えてもらえないのではこちらも答えられません。
SurferOnWww

2021/11/21 22:42

質問者さん、その後無言ですが、回答したのでそれに対するフィードバックを書きましょう。役に立った/立たなかったぐらいはすぐ返せるのでは? 役に立たなかったらどこが期待と違うかなどを書くと、よりあなたの期待に近い回答が得られるかも。とにかく無言は NG です。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

MVC

MVC(Model View Controller)は、オブジェクト指向プログラミングにおけるモデル・ビュー・コントローラーの総称であり、ソフトフェア開発で使われている構築パターンとしても呼ばれます。

.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

ASP.NET MVC Framework

ASP.NET MVC Frameworkは、MVCパターンをベースとした、マイクロソフトのウェブアプリケーション開発用のフレームワークです。