نمایش نتایج 1 تا 7 از 7

نام تاپیک: مشکل با ViewModel

  1. #1
    کاربر دائمی
    تاریخ عضویت
    آذر 1389
    محل زندگی
    تهران
    پست
    126

    Question مشکل با ViewModel

    سه تا تیبل دارم به نام members عضو , پرداخت هاPayments, وامLoan
    میخوام برای مدیریت عضو یک view بسازم که یکسری فیلد از سه تا تیبل بالا رو توش داره و مثل Details فقط یک رکورد رو id یکی از تیبل ها نشون بدم
    باید برای فقط یک کاربر( members) آخرین پرداخت و وام جاری به اضافه موجودیش رو توی یک صفحه نشون بدم.
    برای همین یک ViewModel ساختم که فیلد هایی که میخوام نمایش بدم رو از سه تا کلاسه دیگه جدا کردم و تو ویو مدلم گذاشتم.

    ویو مدلم این شکلیه
      // members
    [Key]
    public int MemberID { get; set; }
    public int PeykID { get; set; }
    public int RangeID { get; set; }
    public int Store { get; set; }
    public int Stock { get; set; }
    public Nullable<bool> IsSaye { get; set; }

    //Payments
    public int PaymentID { get; set; }
    public int PaymentTypeID { get; set; }
    public System.DateTime DatePeyment { get; set; }
    public int Amount { get; set; }

    //Loans
    public int LoanID { get; set; }
    public Nullable<System.DateTime> LoanDate { get; set; }
    public Nullable<int> TotalLoan { get; set; }
    public Nullable<int> Remaining { get; set; }


    حالا مشکلم اینه که نمیتونم از روی ویو مدلم Details بسازم ؟؟؟

  2. #2
    کاربر دائمی
    تاریخ عضویت
    آذر 1389
    محل زندگی
    تهران
    پست
    126

    نقل قول: مشکل با ViewModel

    کسی نیست جواب بده خیلی گیرم تورو خدا یکی جواب بده

  3. #3
    کاربر دائمی آواتار alireza.tabesh
    تاریخ عضویت
    اردیبهشت 1392
    محل زندگی
    تهران
    پست
    164

    نقل قول: مشکل با ViewModel

    باید کوئری اجرا کنی
    یک کلاس ایجاد کنی داخلش :

    public partial class ViewClass
    {
    public static IQueryable[ViewModel] GetDetails(int id)
    {
    var model = from r in db.Table
    where TableId==id
    select new ViewModel
    {
    ViewModelColumn1 = r.column1
    .
    .
    .
    };
    return model;
    }
    }

    اینجوری مدل بدست اومده رو استفاده می کنی .

  4. #4
    کاربر دائمی
    تاریخ عضویت
    آذر 1389
    محل زندگی
    تهران
    پست
    126

    Unhappy نقل قول: مشکل با ViewModel

    کد رو نتونسم انجام بدم چون بعضی از فیلد ها رو نمیتونم بیارم به خاطر ریلیشنی که زدم
    یک کوئری زدم که فیلتری که میخوام رو انجام بده
    from members in db.Members
    join payments in db.Payments on members.MemberID equals payments.MemberID
    join laons in db.Laons on members.MemberID equals laons.MemberID
    select new {
    MemberID = (Int32?)members.MemberID,
    members.Name,
    members.Family,
    members.sex,
    members.Education,
    members.MemberDate,
    members.GroupAge,
    members.Store,
    members.Stock,
    members.IsSaye,
    payments.DatePeyment,
    payments.Amount,
    laons.LoanID,
    laons.LoanDate,
    laons.TotalLoan,
    laons.Remaining,
    laons.FinishDate
    }

    این رو تبدیل به یک لیست میکنم و به ویو پاس میدم ولی نمیتونم id رو به ویو بفرستم تا فیلتر بشه
    البته این دیگه از ویو مدل دیگه استفاده نمیکنه نمیدونم باید چی کار کنم پارشیال ویو هم نمیتون استفاده کنم چون باید برای هر پارشیال یک id بفرستم
    بهترین روش استفاده از viewmodel ولی همه مثال ها برای ویو مدل یک جدول و اگر هم چند تا جدول باشه شرطی براش گذاشته نشده و برا اساس یک فیلد فیلتر نمیشه
    کسی نمیدونه چطری میشه این کا رو انجام داد

  5. #5
    کاربر دائمی آواتار alireza.tabesh
    تاریخ عضویت
    اردیبهشت 1392
    محل زندگی
    تهران
    پست
    164

    نقل قول: مشکل با ViewModel

    نیازی به Join نیست. البته اگر شما در model های اولیه join هارو تعریف کرده باشید. و مشکل دیگه در کد شما اینکه وقتی new مینویسید باید بگید که کدوم model باید باشه. مدل جدید رو باید new کنید و نام فیلد های مورد نظر رو قرار بدید . برای نمونه این رو نگاه کنید :

    namespace DaaviRefahBank.ReportsModel
    {
    public class DadkhastReportModel
    {
    public string KhahanFirstName { get; set; }
    public string KhahanLastName { get; set; }
    public string KhahanFatherName { get; set; }
    public string KhahanAge { get; set; }
    public string KhahanJob { get; set; }
    public string KhahanAddress { get; set; }
    public string KhandehFirstName { get; set; }
    public string KhandehLastName { get; set; }
    public string KhandehFatherName { get; set; }
    public string KhandehAge { get; set; }
    public string KhandehJob { get; set; }
    public string KhandehAddress { get; set; }
    public string VakilFirstName { get; set; }
    public string VakilLastName { get; set; }
    public string VakilFatherName { get; set; }
    public string VakilAge { get; set; }
    public string VakilJob { get; set; }
    public string VakilAddress { get; set; }
    public string DadkhastSubject { get; set; }
    public string DalaeelVaZamaeem { get; set; }
    public string DadkhastText { get; set; }
    public string DadkhastNumAndDate { get; set; }
    public string CrimePlace { get; set; }
    }

    public partial class CDadkhastReport
    {
    public static IQueryable<DadkhastReportModel> GetReport(Guid? id)
    {
    var db = new DaaviDB();
    var model = from dadkhast in db.DAV_Dadkhast
    where dadkhast.PKDadkhastID == id
    select new DadkhastReportModel
    {
    KhahanFirstName = dadkhast.GNL_Entity.FirstOrDefault().FirstName,
    KhahanLastName = dadkhast.GNL_Entity.FirstOrDefault().LastName,
    KhahanFatherName = dadkhast.GNL_Entity.FirstOrDefault().FatherName,
    KhahanAge = dadkhast.GNL_Entity.FirstOrDefault().BirthDate,
    KhahanJob = dadkhast.GNL_Entity.FirstOrDefault().Job,
    KhahanAddress = dadkhast.GNL_Entity.FirstOrDefault().Adress,
    KhandehFirstName = dadkhast.GNL_Entity1.FirstOrDefault().FirstName,
    KhandehLastName = dadkhast.GNL_Entity1.FirstOrDefault().LastName,
    KhandehFatherName = dadkhast.GNL_Entity1.FirstOrDefault().FatherName,
    KhandehAge = dadkhast.GNL_Entity1.FirstOrDefault().BirthDate,
    KhandehJob = dadkhast.GNL_Entity1.FirstOrDefault().Job,
    KhandehAddress = dadkhast.GNL_Entity1.FirstOrDefault().Adress,
    VakilFirstName = dadkhast.GNL_Entity2.FirstOrDefault().FirstName,
    VakilLastName = dadkhast.GNL_Entity2.FirstOrDefault().LastName,
    VakilFatherName = dadkhast.GNL_Entity2.FirstOrDefault().FatherName,
    VakilAge = dadkhast.GNL_Entity2.FirstOrDefault().BirthDate,
    VakilJob = dadkhast.GNL_Entity2.FirstOrDefault().Job,
    VakilAddress = dadkhast.GNL_Entity2.FirstOrDefault().Adress,
    DadkhastSubject = dadkhast.Khaste + " - بهای خواسته : " + SqlFunctions.StringConvert(dadkhast.KhastePrice) ,
    DalaeelVaZamaeem = dadkhast.Dalayel,
    DadkhastText = dadkhast.Sharh,
    DadkhastNumAndDate = dadkhast.DadkhastNumber + " - " + dadkhast.DadkhastDate,
    CrimePlace =dadkhast.CrimePlace
    };
    return model;
    }
    }
    }


    توجه کنید که من ID رو بعنوان یک پارامتر در اختیار query میذارم و نتیجه رو دریافت می کنم . البته من بخاطر اینکه برای report استفاده کردم IQueryable گذاشتم و شما باید از IEnumrable استفاده کنید و مدل رو .toList() بازگشت بدید .

  6. #6
    کاربر دائمی
    تاریخ عضویت
    آذر 1389
    محل زندگی
    تهران
    پست
    126

    نقل قول: مشکل با ViewModel

    تمام join ها قبلا تعریف کردم.
    اگر درست متوجه شده باشم برای هر table باید یک مدل new کنم و فیلد ها رو بهش معرفی کنم اگر سه تا جدول هست باد سه بار کوئری بنویسم یا اینکه var model = from dadkhast in db.DAV_Dadkhast بعدش بقیه جدولها رو هم بیارم؟
    من ویو مدل رو تغییر دادم

     public class BasicViewModel
    {
    public Members member { get; set; }
    public Payments payment { get; set; }
    public Laons laon { get; set; }

    public BasicViewModel(int MemberID)
    {
    var db = new ApiaryEntities();
    member = db.Members.First(x => x.MemberID == MemberID);
    laon = db.Laons.First(x=>x.MemberID==MemberID);
    payment = db.Payments.First(x => x.MemberID == MemberID);
    }

    }
    }


    کنترل رو هم اینشکلی نوشتم

     public ActionResult Index(int id)
    {

    var viewModel = new BasicViewModel(id);
    return View(viewModel);
    }


    ویو رو هم

    <fieldset>
    <legend>PostCommentViewModel</legend>
    @Html.DisplayFor(x => x.member.MemberID)
    <br />
    @Html.DisplayFor(x => x.member.MemberDate)
    <br />
    @Html.DisplayFor(x => x.member.Name)
    <br />
    @Html.DisplayFor(x => x.member.Family)
    <br />
    @Html.DisplayFor(x => x.payment.Amount)
    <hr />
    @Html.DisplayFor(x => x.laon.FinishDate)
    </fieldset>


    دو تاسوال اول اینکه میتونم دو تاشرط رو باهم اعمال کنم برای هر جدولی یا نه مثلا بجز id فیلدی که برابر بود با false؟
    دوم این روشی که انجام دادم درسته یا نه؟
    آخرین ویرایش به وسیله gama_slv : دوشنبه 04 آذر 1392 در 14:50 عصر

  7. #7
    کاربر دائمی آواتار alireza.tabesh
    تاریخ عضویت
    اردیبهشت 1392
    محل زندگی
    تهران
    پست
    164

    نقل قول: مشکل با ViewModel

    برای هر View که این View شامل چند مدل باشه . البته نه برای ویرایش بلکه برای نمایش. شما برای جدول خودتون راه ساده دارید . یا نیاز به ترکیب اطلاعات یک جدول برای نمایش در یک سلول . چون شما بحث ایجاد یک View رو مطرح کردید من اینطور توضیح دادم . شما می تونید از db.TableName.Tolist() استفاده کنید . البته راهی که گفتید از لحاظ طراحی نرم افزار صحیح تره .
    واضح تر بگم :
    سه جدول دارید بنام جدول1 ، جدول2 و جدول3 که میخواید با join کردن این جدول ها اطلاعات نمایش داده بشه . شما یک ویو ساختید بنام جدول4 . پس جدول4 new میشه و اطلاعاتش رو از 3 جدول مذکور میگیره

تاپیک های مشابه

  1. یک مشکل هنگام کپی کردن فایل مربوط به بانک
    نوشته شده توسط ghaum در بخش SQL Server
    پاسخ: 4
    آخرین پست: یک شنبه 25 اردیبهشت 1384, 23:00 عصر
  2. مشکل در دسترسی به Interbase
    نوشته شده توسط Mahdiseif در بخش بانک های اطلاعاتی در Delphi
    پاسخ: 8
    آخرین پست: سه شنبه 26 فروردین 1382, 00:03 صبح
  3. مشکل در بی دی ای دلفی
    نوشته شده توسط hosseinabdollah در بخش بانک های اطلاعاتی در Delphi
    پاسخ: 1
    آخرین پست: یک شنبه 17 فروردین 1382, 17:38 عصر
  4. مشکل ارسال ایمیل در سایت
    نوشته شده توسط mahmoodreza در بخش گفتگو با مسئولین سایت، درخواست و پیشنهاد
    پاسخ: 2
    آخرین پست: شنبه 16 فروردین 1382, 14:24 عصر
  5. مشکل در نمایش Time
    نوشته شده توسط (امید) در بخش مباحث عمومی دلفی و پاسکال
    پاسخ: 4
    آخرین پست: شنبه 24 اسفند 1381, 10:23 صبح

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •