ورود

View Full Version : سوال: مشکل با لود کردن اطلاعات از بانک



MiladParvane
سه شنبه 01 بهمن 1392, 00:00 صبح
سلام دوستان عزیز من یه جدول branch دارم که اطلاعات گروه خبری مثل ورزشی اقتصادی و غیره رو نگه داری می کنه
خوب برای خوندن اطلاعات هم مراحل رو طی میکنم با روش mvc کار میکنم ولی ارور زیرو میده
Object reference not set to an instance of an object.
اولین چیزی که به ذهن ادم میرسه اینه که مشکلی از مدل هست ولی با گذاشتن break point فهمیدم که به بانک دسترسی داره و داده ها رو میخونه داده ها رو از بانک میگیره و تا کنترولر دیدم که اطلاعات اومد(به وسیله برک پوینت) ولی به پارشال ویو میرسه ارور بالا رو میده
ممنون از توجهتون

sunn789
سه شنبه 01 بهمن 1392, 00:20 صبح
معمولاً به نوع مدل گه پاس میکنی به view بستگی داره به این معنی که اگر یک رکورد رو میخونه در انتهای Query از FirstOrDefault() استفاده کرده باشی و در ویوو هم زمانی @model رو تعریف میکنی از Enumerable استفاده نکنی اما اگر یک سری اطلاعات رو میفرستی در انتهای query از .toList() استفاده کنی و در بالای View هم از Enumerable

MiladParvane
سه شنبه 01 بهمن 1392, 00:49 صبح
کد مدل

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Data.Entity;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace News.Models
{
public class NewsDbEntities : DbContext
{
public NewsDbEntities()
: base("NewsDbEntities")
{
}

public DbSet<Branch> branch { get; set; }

}

[Table("TblBranch")]
public class Branch
{
[Key]
public byte BranchID { get;set; }

[DataType(DataType.Text)]
[Display(Name="گروه خبری")]
public string BranchName{get;set;}
}

}



کد کنترلر


public ActionResult GetBranch()
{
List<Branch> q = (from p in Db.branch select p).ToList();

return PartialView(q.ToList());
}


کد پارشال ویو

@using News.Models
@model IEnumerable<News.Models.Branch>

<div id="NewsGroup">
<ul>
@foreach (Branch branch in Model)
{
<li>@Html.ActionLink(branch.BranchName,"GetBranch")</li>
}
</ul>
</div>

MiladParvane
سه شنبه 01 بهمن 1392, 13:58 عصر
هیچ کس نیست کمکی کنه؟

بهزاد علی محمدزاده
سه شنبه 01 بهمن 1392, 16:18 عصر
سلام . آقا میلاد حالت چطوره ؟ ... راستش پروژه دارم و امتحان نهایی و خیلی گرفتارم زیاد نمی تونم بمونم . اومدم یه خستگی در کنم که تاپیکت و دیدم .

شما بایستی نمونه ایی رو ایجاد کنی و بعد با کویری دیتابیس اون نمونه رو پر کنی . اما شما نمونه رو ایجاد نکردی به همین خاطر داره اشکال میگیره .

این خط و تغییر بده ببین درست میشه یا نه :


List<Branch> q = (from p in Db.branch select p).ToList();

به :


List<Branch> q = new List<Branch>();
q = (from p in Db.branch select p).ToList();

بهزاد علی محمدزاده
سه شنبه 01 بهمن 1392, 16:22 عصر
یادت باشه وقتی شما صریحا نوع تعریف می کنی :


List<Branch> q

باید براش با new نمونه سازی کنی . اما وقتی از کلمه کلیدی var استفاده می کنی کامپایلر این کار رو برات انجام میده . فعلا خداحافظ و موفق باشی . (امیدوارم مشکلت حل شده باشه .)

sunn789
سه شنبه 01 بهمن 1392, 17:36 عصر
من هم وقتی دیشب این و فرمودین نمیدونستم جرا اما اگه ایجور که اقا بهزاد میگن میتونی با var به جای
List<Branch> q
مشکلتون حل شه

hakim22
چهارشنبه 02 بهمن 1392, 07:07 صبح
مشکل در این است که مدلی که به ویو منتقل میشود null است حالا یا به این دلیل است که چیزی یافت نشده یا اطلاعات از سرور خوانده نشده است.
اول اینکه نوع متدل GetBranch رو بجای ActionResult رو روی PartialViewResult قرار بدید و همچنین در مقدار بازگشتی نام PartialView مورد نظر رو هم وارد کنید تا مطمئن بشید که مسیر درست رو میره . در ضمن بهتره برای نام گذاری PartialVIew ها یک زیر خط در ابتدای نام آنها قرار بدید. از Convention بیرون میاد اما برای برنامه نویس تشخیصش راحت تر میشه.

در مورد مشکلی دوستمون بهش اشاره کردند باید بگم که اینطور نیست و شما میتوانید در یک خط همزمان مقدار دهی و تناسب برقرار کنید اما کلا بهتره همیشه در سمت چپ بجای نوع دقیق متغیر از var استفاده کنید. (خوب است ابزار Resharper رو نصب کنید تا خیلی سریع این روشها رو پیاده کنید)

در ضمن کدی هم که باهاش این PartialView رو فراخوانی می کنید قرار بدید

MiladParvane
چهارشنبه 02 بهمن 1392, 09:40 صبح
خیلی ممنون دست همگی درد نکنه ولی فهمیدم مشکل از کجا بود از نهوه ی فراخوانی پارشیال ویو که اشتباه بود و باید مینوشتم

@Html.Action("GetBranch","Home")