私はASP.NET MVC 4を使用しています。画像をディレクトリにアップロードして、データベースに画像の名前を書き込もうとしています。しかし、ファイル名がヌルで表示されています。オブジェクト参照がオブジェクトのインスタンスに設定されていません。コントローラのHttpPost Create()メソッドのパラメータである場合、HttpPostedFileBaseファイル変数のエラーエラーです。ここでディレクトリに画像をアップロードし、画像の名前をデータベースに書き込む
は、モデルでのファイル名です:
public string ImageName { get; set; }
これはビューである:ここでは
@using (Html.BeginForm()) {
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)
<fieldset>
<legend>Expense</legend>
<div class="editor-label">
@Html.LabelFor(model => model.ImageName)
</div>
<div class="editor-field">
<input type="file" name="file" />
</div>
<p>
<input type="submit" value="Create" />
</p>
</fieldset>
}
はコントローラでHttpPost作成()メソッドです。
[HttpPost]
[ValidateAntiForgeryToken]
[Authorize]
public ActionResult Create(Expense expense, HttpPostedFileBase file)
{
if (ModelState.IsValid)
{
var fullName = db.UserProfiles.Where(u => u.UserId == expense.UserId).Select(n => n.FullName).ToArray()[0];
if (file.ContentLength > 0)
{
var fileName = Path.GetFileName(file.FileName);
var path = Path.Combine(Server.MapPath("~/Images/" + fullName), fileName);
file.SaveAs(path);
}
var query =
from e in db.Expenses
where e.ExpenseId == expense.ExpenseId
select e;
foreach (Expense exp in query)
{
exp.ImageName = file.FileName;
}
db.Expenses.Add(expense);
db.SaveChanges();
return RedirectToAction("Index");
}
var errors = ModelState.Values.SelectMany(v => v.Errors);
ViewBag.UserId = new SelectList(db.UserProfiles, "UserId", "UserName", expense.UserId);
return View(expense);
}
はあなたが/チェックファイルを保存する前に、ローカル変数を作成してみましたこの値を 'file.FileName'に設定していますか?そして、あなたは 'foreach'ループでこの変数を参照することができます –
ちょっと@GeoffJames、私はそれをやろうとしました。私はまだオブジェクト参照エラーを取得します。 – Sicypher
OKだから、 'file'自体は' null'です、私が正しく理解すれば?フォームの 'name' _and_' id''を 'file'に設定し、フォームの' enctype = "multipart/form-data"を設定し、メソッドが 'post'であることを確認してください。 –