PDA

View Full Version : سوال: ارور Object reference not set to an instance of an object. هنگام چک کردن مقدار



r4hgozar
یک شنبه 16 آذر 1393, 06:05 صبح
سلام.
من از فرم یک IEnumerable<HttpPostedFileBase> file می گیرم.
حالا میخوام چک کنم اگه filename خالیه دستوری اجرا نشه.

if (files.FileName != null)
{
albumViewModel.Imageurl1 = files[i].FileName;

اما به مشکل زیر بر می خورم!!!

[I]Object reference not set to an instance of an object.


نمی دونم چرا گیر میده، از دستور if اشکال میگیره!!

hakim22
یک شنبه 16 آذر 1393, 07:06 صبح
فایل وقتی به سرور ارسال نشه مقدار سمت سرور null میشه (files[i]) و به همین ترتیب FileName نخواهد داشت.

r4hgozar
یک شنبه 16 آذر 1393, 07:11 صبح
درسته.
خوب من چی کار باید بکنم ؟
وقتی میخوام عکس رو سیو کنم مقدار path وقتی خالی باشه ارور میده.
پس من باید مقدار filename رو چک کنم اگه خالی بود اجرا نشه دیگه!!!
از دستور دیگه میشه استفاده کرد؟

hakim22
یک شنبه 16 آذر 1393, 09:56 صبح
1) چک کنید Files مقدار null نداشته باشه و بعد Files [i] i نباید null باشه .
2) شما می توانید با استفاده از Fiddler و یا Network در Chrome چک کنید که آیا فایل ها اصلا به سرور ارسال میشه یا نه .
3) اگه شما متغیر null دارید فایلها به سرور ارسال نمیشه.

r4hgozar
یک شنبه 16 آذر 1393, 10:06 صبح
سلام.
بله استاد من طبق کدی که قبلا دادین. 20 تا عکس میگیرم
IEnumerable<HttpPostedFileBase> file

حالا از این 20 تا فقط 5 تا پر میشه کمتر یا بیشتر.
20 تا عکس رو باید سیو کنم.
اما می خوام چک کنم که اکه files[i].FileName != null خالی باشه با همون null دیگه وارد مرحله نشه.
مقادیرم ارسال میشه اما چون 5 تا عکس انتخاب شده 15 تا دیگه خالیه.

r4hgozar
یک شنبه 16 آذر 1393, 20:01 عصر
وقتی می خوام شرط خالی بودن رو چک کنم این ارور رو میده.
واقعا نمی دونم دلیلش چیه!!!

این عکس (http://s5.picofile.com/file/8155868042/Untitled.png)

RIG000
یک شنبه 16 آذر 1393, 21:56 عصر
@{
Layout = null;
}


<!DOCTYPE html>


<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>View</title>
</head>
<body>
<form action="" method="post" enctype="multipart/form-data">


<label for="file1">Filename:</label>
<input type="file" name="files" id="file1" />


<label for="file2">Filename:</label>
<input type="file" name="files" id="file2" />


<input type="submit" />
</form>
</body>
</html>



واین هم

public ActionResult Havij() {
return View();
}


[HttpPost]
public ActionResult Havij(IEnumerable<HttpPostedFileBase> files)
{
foreach (var file in files)
{
if (file !=null)
{
var fileName = Path.GetFileName(file.FileName);
var path = Path.Combine(Server.MapPath("~/App_Data/uploads"), fileName);
file.SaveAs(path);
}
}
return RedirectToAction("Index");
}
که باید اینجوری بنویسی تا مشکلت حل شه.
if (file !=null)
این جواب میده. یه نمونه که همه استفاده کنن...
فقط در پروژه شما امیدوارم مشکل overaide کردن اسم همنام وجود نداشته باشه و بهشاسم داده باشید....

r4hgozar
دوشنبه 17 آذر 1393, 05:40 صبح
سلام .ممنون اما بازم ارور میده.
تو حالت عادی درست جواب میده اما وقتی یکی از مقادیر null باشه یعنی تگ آپلود یکی از عمس ها خالی باشه میاد و ارور میده! همون ارور بالا رو میده
اگه overaied باشه باید چی کار کنم؟؟

RIG000
دوشنبه 17 آذر 1393, 10:25 صبح
یه جای کد هات مورد داره ... هر چی باشه از اون if رد میشه اکه null باشه و به if گیر نمیده ...
باید ببینم کدها رو...
برای اینکه override نشه باید اسم فایل رو بهش یه مقدار اضافه کنی. بهتر ین راه حل guid هستش...