PDA

View Full Version : چگونه اطلاعات را لود و در پارشیال ویو بریزم و سپس در لایوت از ان استفاده کنیم؟



RIG000
سه شنبه 04 آذر 1393, 16:43 عصر
دوستان قرار هست که من اطلاعاتی رو بکشم و در پارشیال بریزمش و و پارشیال ویو رو تو لایوت نشون بدم ...
خب در حال حاضر من الی نمیدونم اینجوری که نوشتم اصلا این اکش داره اعمال میشه یا نه! و یک ارور داره .
خب این اکشن من

public ActionResult _ListPartialNavbarPageGroup() {
var db = new eShopMVCEntities();
var Query = (from title in db.PageGroups
select title).ToList();
return View(Query.AsEnumerable());
}
و اینم خود پارشیال که تنظیمش کردم



@using System.Data@model IEnumerable<EshopFull.Models.PageGroups>
<div class="navbar-collapse collapse">
<ul class="nav navbar-nav">
@foreach (var item in Model)
{


<li>@Html.ActionLink(@item.PageGroupTitle, "ListNavbarPageGroup", "Pages", new { Id = @item.PageGroupID }, null)</li>
}
</ul>
</div>






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


@Html.Partial("~/Views/PageGroups/_ListPartialNavbarPageGroup.cshtml", new PageGroups())

حالا موقعی که من اکش Index در کنترلر home رو صدا میزنم که اجرا بشه باید برام خود لایوت رو هم بیاره و داخل لایوت مقدار هایی رو که فراخونی کردم رو نشون بده که به این ارور میخورم.


The model item passed into the dictionary is of type 'EshopFull.Models.PageGroups', but this dictionary requires a model item of type 'System.Collections.Generic.IEnumerable`1[EshopFull.Models.PageGroups]'.


و از صبح حل نشده .... چیکار کنم که مقدار هایی رو تو پارشیال لود کنم و پارشیال رو تو لایوت بذارم و نشون بدم ... :(

RIG000
سه شنبه 04 آذر 1393, 17:26 عصر
الان من اینو په جوری بنویسم که بین این پارشیال و action مربوطش ارتباط برقرار بشه . من اگه مسقیم تو لایوت بنویسمدرست کار میکنه اما نمیدونم چه جوری این خط کد رو ienumarable کنم تا ارتباط action و partial بر قرار شه .

@Html.Partial("~/Views/PageGroups/_ListPartialNavbarPageGroup.cshtml", new PageGroups())

sunn789
سه شنبه 04 آذر 1393, 18:37 عصر
چرا از New بریا ارسال Model به PartialView استفاده کردین م، مطمئن نیستم اما این رو تغییر بدین

RIG000
سه شنبه 04 آذر 1393, 18:52 عصر
الان دقیقا" مشکل همون جا هستش؟ اونجا فکرر کنم باید ienumarable بشه؟؟؟ چی بشه که ارتباط برقرار شه؟ اصلا نمیدونم این روشی که بکار بردم ایا درست هست یا نه؟
new نزارم چی بزارم؟ به هر حالا چون لایوت سوار بر روی ویو های دیگه هم میشه که توشون مدل هست نمیخام باهم تلاقی پیدا کنن .

hakim22
سه شنبه 04 آذر 1393, 19:40 عصر
اول :


public PartialViewResult _ListPartialNavbarPageGroup() {
var db = new eShopMVCEntities();
var Query = (from title in db.PageGroups
select title).ToList();
return PartialView(Query.AsEnumerable());
}


دوم :


@Html.Action("_ListPartialNavbarPageGroup","contllerName")


از Html.Partial وقتی استفاده می شود که شما مدل نداشته باشید ، یعنی نمیخواهید مدل رو از سرور بخونید و قبلا در ویو به طریقی لود شده . در غیر این صورت باید از Action استفاده کنید.
البته به چند روش میشه از partial برای همین کد هم استفاده کرد. اما روش پیشنهادی یا (Best practice) نیست

ضمن اینکه هر لیستی حتما Enumerable هست و نیازی به asEnumerable ندارید.

RIG000
سه شنبه 04 آذر 1393, 20:06 عصر
asEnumerable
رو بخاطر یه ارور دیگه گذاشته بودم بله درست می گید . حل شد. بخاطر این سوال مجبور شدم از codeproject هم سوال کنم.
جای این رو داره که ازتون ممنون باشم چون خیلی بهم کمک کرد این تکه کد. بسیار ممنون.
این رو نمی دونستم واقعا که :

از Html.Partial وقتی استفاده می شود که شما مدل نداشته باشید



باز هم متشکرم.

sunn789
سه شنبه 04 آذر 1393, 20:14 عصر
همون برگشتی که از بانک رو میگیرید باید به partial پاس بدین اما یه چیزی شبیه به متد پاس میدین و این خطا رو دارین، برای پارشیال ها چند موردداره و هر کدام کاربردو یا مزایاای داره ،
1 استفاده از ChildAction به عنوان [Attribute] در کنترل
2 return Partialview بیشتر زمانی که مستقیماً نیازی به استفاده از Partial دارید
3 در View میتوانید Action رو استفاده کنید بدون مودل و فقط اکشن اجرا میشه ،
partial view رو استفاده کنید با مودل و یا با استفاده از Partial تنها بدون مودل -در صورتی که نیاز به استفاده از اطلاعات بانک نداشته باشید-
و در Partial view نیز رفرنس به Model که پاس بدین :گیج:

مهدی کرامتی
چهارشنبه 05 آذر 1393, 05:00 صبح
خیلی از اوقات متن پیام خطا خودش جوابی که دنبالش می گردید رو داره. به متن پیام دقت کنید:

The model item passed into the dictionary is of type 'EshopFull.Models.PageGroups', but this dictionary requires a model item of type 'System.Collections.Generic.IEnumerable`1[EshopFull.Models.PageGroups]'.
میگه مدل پاس شده به صفحه، یک تک Object از جنس PageGroups است، در حالی که در بالای Partial View در جایی که model@ را نوشته اید، لیستی از نوع فوق را به عنوان مدل صفحه تعریف کرده اید. View انتظار یک لیست دارد، شما به آن یک Object تک تحویل داده اید.

در ضمن، چرا دارید اطلاعات مورد نیاز Partial View فوق را خالی می فرستید؟ باید از دیتابیس بخوانید و ارسال کنید.

RIG000
چهارشنبه 05 آذر 1393, 11:14 صبح
سلام اقای کرامتی عزیز -
در مورد اینکه گفتین ارور همه چیز رو گفته درسته و حق باشماست . مشکل من این بود که من تو ارتباط اینها به مشکل خورده بودم . یعنی اگه تو اولین قسمت سوالم دقت کنید خودمم مونده بودم کهnull داره ارسال میشه یا نه ...
اقای حکیم وقتی
@Html.Action("_ListPartialNavbarPageGroup","contll erName")
این رو نوشتن من تازه فهمیدم این action listpartialnavbarpagegroup اصلا اعمال نشده بود. --- من تموم سعی ام اینجا بود که چطور ما از چندین مدل تو یه صفحه بتونیم استفاده کنیم تا به خطا نخوریم .. چون لایوت و ویو که رندر بشن میرن رو هم و اگه مدل ها رو تو پارشیال نریخته باشیم از مدل خطا ها میده اما اینبار میاد به مدل پاس داده های هم گیر میده .. چون قبلا همچین چیزی سرم اومده بود برای فرم لاگین اما اینجا که میخاستم اطلاعات رو بکشم به مشکل خورده بودم ....
الانم میدونسم مشکلم تو همون خط کد html.action بود اما بهش اصلا فکر نکرده بودم یا شاید واقعا قاطیکرده بودم...
این اکشن داره اطلاعات رو برای ارشیال لود میکنه و مشکلی هم نداره و از دیتابیس داره میخونه

public PartialViewResult _ListPartialNavbarPageGroup() { var db = new eShopMVCEntities();
var Query = (from title in db.PageGroups
select title).ToList();
return PartialView(Query());
}