PDA

View Full Version : مبتدی: دسترسی به فیلد های جدول در View



arash ghafori
چهارشنبه 29 آبان 1392, 10:22 صبح
با سلام.
من اول یه Linq to SQL به پروژه اضافه کردم و دیتابیسم رو داخلش Add کردم.
بعد به کنترلر رفتم و و دستور زیر رو نوشتم :

Clinic_DataClassesDataContext db = new Clinic_DataClassesDataContext();

public ActionResult Index()
{
var doctorTable = db.Doctor_Tables.ToList();
return View(doctorTable);
}


الان من خود جدول doctorTable رو به Viewی مورد نظر فرستادم.
بعد یک View رو از نوع List درست کردم و داده ی ارسالی از کنترلر رو توی View به این شکل خوندم.

@model IEnumerable<Dental_Clinic.Doctor_Table>
@{
Layout = "~/_LayoutPage.cshtml";
}

و اینجوری نمایشش دادم:(توی یه foreach)

<td>@Html.DisplayFor(modelItem => item.Takhasos)</td>


حالا مشکل من اینجاست که چجوری اطلاعات جدول های دیگه رو نمایش بدم؟؟؟
یعنی چطوری مثلا به "فیلد های" جدول دیگه دسترسی پیدا کنم و اطلاعاتشون رو نمایش بدم؟؟

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

R_Rajaee_Rad
چهارشنبه 29 آبان 1392, 10:45 صبح
شما توی کنترلر تون (جایی که داده ها رو برای ویو میفرستید) با دستور join جداول مورد نظرتون رو ترکیب کنید و با استفاده از یک مدل جدید که شامل فیلدهای این 2 جدول میشه به ویو بفرستید

کنترلر

var query = (from u in bank.UserProfiles
join a in bank.Articles on u.UserId equals a.UserId
select new ArticleViewModel()
{
ArticleId = a.ArticleId,
UserId = a.UserId,
NameSender = u.Username,
}).OrderByDescending(a=>a.ArticleId).ThenBy(a=>a.ArticleId);
return View(query.ToList());


ArticleViewModel


public class ArticleViewModel
{

public int ArticleId { get; set; }
public int UserId { get; set; }
public string NameSender { get; set; }



}

bade saba
چهارشنبه 29 آبان 1392, 11:00 صبح
یه راه حل دیگه اینه که یک مدل جدید بسازی از اون Table هایی که داری تشکیل شده و مثلا به این شکل میشه

public class DocNur
{
public List<Doctor> doc{ get; set; }

public List<nurse> Nur{ get; set; }
}
بعد یه نمونه از این کلاس میسازی و هر کدوم از بخش های اون رو به همون شکلی که توی اون کدهای خودت هست پر میکنی و بعد این کلاس رو ارسال میکنی به View

arash ghafori
چهارشنبه 29 آبان 1392, 11:33 صبح
یه راه حل دیگه اینه که یک مدل جدید بسازی از اون Table هایی که داری تشکیل شده و مثلا به این شکل میشه

public class DocNur
{
public List<Doctor> doc{ get; set; }

public List<nurse> Nur{ get; set; }
}
بعد یه نمونه از این کلاس میسازی و هر کدوم از بخش های اون رو به همون شکلی که توی اون کدهای خودت هست پر میکنی و بعد این کلاس رو ارسال میکنی به View


ممنون از پاسختون.
اما متاسفانه متوجه نشدم. من توی این زمینه یکم تازه کارم...
ممنون میشم یه کم موضوع رو باز ترش کنید.
با تشکر

arash ghafori
چهارشنبه 29 آبان 1392, 12:27 عصر
شما توی کنترلر تون (جایی که داده ها رو برای ویو میفرستید) با دستور join جداول مورد نظرتون رو ترکیب کنید و با استفاده از یک مدل جدید که شامل فیلدهای این 2 جدول میشه به ویو بفرستید

کنترلر

var query = (from u in bank.UserProfiles
join a in bank.Articles on u.UserId equals a.UserId
select new ArticleViewModel()
{
ArticleId = a.ArticleId,
UserId = a.UserId,
NameSender = u.Username,
}).OrderByDescending(a=>a.ArticleId).ThenBy(a=>a.ArticleId);
return View(query.ToList());


ArticleViewModel


public class ArticleViewModel
{

public int ArticleId { get; set; }
public int UserId { get; set; }
public string NameSender { get; set; }



}


دوست عزیز ممنون.
فقط دو تا مشکل دارم.
اول اینکه جداول رو Join کردم و return View(query.ToList()); کردم.
اما چطوری توی View بگیرمش !
ینی من قبلی رو به این صورت میگرفتم :
@model IEnumerable<Dental_Clinic.Doctor_Table>
اینو چطوری بگیرمش!
ممنون میشم کمکم کنید.

R_Rajaee_Rad
چهارشنبه 29 آبان 1392, 13:15 عصر
@model ArticleViewModel

bade saba
چهارشنبه 29 آبان 1392, 13:27 عصر
فرض میکنیم شما دو تا جدول تو DB داری به نام های Doctor و Nurse که فیلهایی دارن مثلا جدول دکتر ها فیلد های شماره ، نام ، نام خانوادگی و زمینه کاری رو داره و و جدول پرستاران فیلد های شماره ، نام و نام خانوادگی برای هر کدام از این جدول ها یک کلاس متناظر میسازید که برای این مطلبی که گفتم برای مثال این شکلی میشه
public class Doctor
{
public int Id { get; set; }
public string name { get; set; }
public string family { get; set; }
public string field { get; set; }



}

public class Nurse
{

public int Id { get; set; }
public string name { get; set; }
public string family { get; set; }
}

حالا شما یه کلاس دیگه میسازی مثل اون چیزی که در بالا گفتم که یه رکوردش لیستی از جدول اول و رکورد دومش لیستی از جدول دوم هست و بعد برای مثال اینجوری پرش میکنی

Clinic_DataClassesDataContext db = new Clinic_DataClassesDataContext();

public ActionResult Index()
{
DocNur DN = new DocNur();
DN.doc = db.Doctor_Tables.ToList();
DN.nur = db.Nurse_Tables.ToList();
return View(DN);
}

توی View هم به این شکل که model.doc و model.nur قابل دسترس هستن

arash ghafori
چهارشنبه 29 آبان 1392, 14:14 عصر
@model ArticleViewModel


من کاری رو که شما گفتید انجام دادم . کنترلرم به این صورت شد :

namespace Dental_Clinic.Controllers
{

public class ClinicController : Controller
{
//
// GET: /Clinic/
Clinic_DataClassesDataContext db = new Clinic_DataClassesDataContext();
public ActionResult Index()
{
var query = (from u in db.Doctor_Tables
join a in db.Days_Tables on u.Code_Doctor equals a.User_code
select new
{
Name = u.User_Table.Name,
Family = u.User_Table.Family,
Takhasos = u.Takhasos,
Rooz = a.Rooz,
Saat = a.Saat,
Tarikh = a.Tarikh
});
return View(query.ToList());
}

}
public class ArticleViewModel
{
public string Name { get; set; }
public string Family { get; set; }
public string Takhasos { get; set; }
public string Rooz { get; set; }
public string Saat { get; set; }
public string Tarikh { get; set; }
}
}

و در View گرفتمش !
اما این ارور رو میده :
113053

ممنون میشم اگه بتونید کمکم کنید....

R_Rajaee_Rad
چهارشنبه 29 آبان 1392, 14:29 عصر
توی کنترلر بعد از select new چرا خالیه؟؟
باید اسم مدل تو بنویسی
ملا در اینجا ArticleViewModel