PDA

View Full Version : من ایتم های منو رو بصورت داینامیک اضافه میکنم و در جدول اضافه میشه ولی وقتی میخام انرو نمایش بدم نم



ghazanfar2
چهارشنبه 23 مرداد 1392, 12:26 عصر
میخام یک cms طراحی کنم و منوهارو بصورت داینامیک اضافه کنم
من تونستم از طریق پارامتر اونارو اضافه کنم یعنی توی دیتابیس اضافه میشه ولی وقتی میخام اون ایتم هارو نمایش بدم نمیشه
من این کدارو نوشتم

<fieldset>


@if (Model.MenuItems != null && Model.MenuItems.Count()>0 )
{
<legend>Menu</legend>
foreach (var item in Model.MenuItems)
{<div style="border: 1px solid #ff6a00; width:500px; height:500px; background-color:#b6ff00">

<div style="width: 400px; height: 300px;">Text:@item.Name</div>
<div>Action:@item.ActionName</div>
<div>Contrller:@item.Controller</div>
<div>Url:@item.Url</div>
<p>
@Html.ActionLink("Edit", "ویرایش", "MenuItem", new { parentMenuId = Model.Id, id = item.Id }, null);

</p>

</div>
<div class="display-label">
@Html.DisplayNameFor(model => model.Name)
</div>
<div class="display-field">
@Html.DisplayFor(model => model.Name)
</div>
}
}
</fieldset>


این کد رو که نوشتم و تریس کردم از این کد رد میشه فک کنم شرط رو درست ننوشتم
میشه راهنمایی کنید که چیکار کنم
ممنون

younesdoost
چهارشنبه 23 مرداد 1392, 12:39 عصر
سلام.کدها رو داخل تگ کد قرار بدید.چیزی که شما می خواید اینه که هر تعداد منو با هر عمقی بشه درست کرد و تو طرف دیگه سایت نمایش داد؟

ghazanfar2
چهارشنبه 23 مرداد 1392, 13:59 عصر
سلام.کدها رو داخل تگ کد قرار بدید.چیزی که شما می خواید اینه که هر تعداد منو با هر عمقی بشه درست کرد و تو طرف دیگه سایت نمایش داد؟
ممنون از توجهتون بله من میخام بصورت داینامیک منو ایجاد کنم و تقریبا موفق شدم اضافه کنم ولی نمیتونم نمایش بدم


<fieldset>

@if (Model.MenuItems != null && Model.MenuItems.Count()>0 )
{
<legend>Menu</legend>
foreach (var item in Model.MenuItems)
{<div style="border: 1px solid #ff6a00; width:500px; height:500px; background-color:#b6ff00">

<div style="width: 400px; height: 300px;">Text:@item.Name</div>
<div>Action:@item.ActionName</div>
<div>Contrller:@item.Controller</div>
<div>Url:@item.Url</div>
<p>
@Html.ActionLink("Edit", "ویرایش", "MenuItem", new { parentMenuId = Model.Id, id = item.Id }, null);

</p>

</div>
<div class="display-label">
@Html.DisplayNameFor(model => model.Name)
</div>
<div class="display-field">
@Html.DisplayFor(model => model.Name)
</div>
}
}
</fieldset>

ممنون که راهنمایی میکنید

ghazanfar2
چهارشنبه 23 مرداد 1392, 14:27 عصر
ممنون از توجهتون بله من میخام بصورت داینامیک منو ایجاد کنم و تقریبا موفق شدم اضافه کنم ولی نمیتونم نمایش بدم


<fieldset>

@if (Model.MenuItems != null && Model.MenuItems.Count()>0 )
{
<legend>Menu</legend>
foreach (var item in Model.MenuItems)
{<div style="border: 1px solid #ff6a00; width:500px; height:500px; background-color:#b6ff00">

<div style="width: 400px; height: 300px;">Text:@item.Name</div>
<div>Action:@item.ActionName</div>
<div>Contrller:@item.Controller</div>
<div>Url:@item.Url</div>
<p>
@Html.ActionLink("Edit", "ویرایش", "MenuItem", new { parentMenuId = Model.Id, id = item.Id }, null);

</p>

</div>
<div class="display-label">
@Html.DisplayNameFor(model => model.Name)
</div>
<div class="display-field">
@Html.DisplayFor(model => model.Name)
</div>
}
}
</fieldset>

ممنون که راهنمایی میکنید

و وقتی شرط رو حذف میکنم
این ارور رو میده:
Object reference not set to an instance of an object.

younesdoost
چهارشنبه 23 مرداد 1392, 14:39 عصر
فکر می کنم جواب این سوال (http://stackoverflow.com/questions/15667473/how-to-create-infinite-nested-sub-menus) دقیقا همونیه که می خواید.
با یه تابع بازگشتی به راحتی می تونید نمایشش بدید.

Mahyaa
دوشنبه 28 مرداد 1392, 14:27 عصر
به نظرم، Model.MenuItems مقدار نداره و برای همینه که نمایش نمیده. درست چک کن ببین مدل رو درست پاس دادی.یا تو مدلت یک برک پوینت بگذار ببین MenuItems مفدار داره یا نه.

hakim22
دوشنبه 28 مرداد 1392, 22:31 عصر
اول مطمئن بشید در بالای View مدل از نوع IEnumerable یا لیست باشد .
بعد برگردید به اکشنی که View رو نمایش میده و ببینید مقدار بازگشتی( مدل به صورت لیست) return view باشه.
بعد مطمئن بشید که مقداری که از بانک بدست میارده درسته یا نه.

ghazanfar2
سه شنبه 29 مرداد 1392, 11:16 صبح
به نظرم، Model.MenuItems مقدار نداره و برای همینه که نمایش نمیده. درست چک کن ببین مدل رو درست پاس دادی.یا تو مدلت یک برک پوینت بگذار ببین MenuItems مفدار داره یا نه.
با سلام ممنون ک ج دادین
بله MenuItems مقدار داره
توی جدول هم چک کردم
تشکر

ghazanfar2
چهارشنبه 30 مرداد 1392, 11:17 صبح
اول مطمئن بشید در بالای View مدل از نوع IEnumerable یا لیست باشد .
بعد برگردید به اکشنی که View رو نمایش میده و ببینید مقدار بازگشتی( مدل به صورت لیست) return view باشه.
بعد مطمئن بشید که مقداری که از بانک بدست میارده درسته یا نه.
سلام ممنون از اینکه ج دادین
من کارایی که شما گفته بودین رو انجام دادم
ولی الان ارور میده
من کدهارو بصورت کامل میزارم لطفا راهنمایی کنید چیکار کنم ممنون
کلاس menu

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web;

namespace LiveTile.Models
{
public class Menu
{
public int MenuItemId { get; set; }
[Key]
public int MenuId { get; set; }
public string Name { get; set; }
public List<MenuItem> MenuItems { get; set; }
}
}
کلاس MenuItem

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web;

namespace LiveTile.Models
{
public class MenuItem
{[Key]
public int MenuItemId { get; set; }
public string Name { get; set; }
public string ActionName { get; set; }
public string ControllerName { get; set; }
public string Url { get; set; }
public Menu ParentMenu { get; set; }
}
}
کنترلر Menu

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Entity;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using LiveTile.Models;

namespace LiveTile.Controllers
{
public class MenuController : Controller
{
private LiveTileContext db = new LiveTileContext();

//
// GET: /Menu/

public ActionResult Index()
{
return View(db.Menus.ToList());
}

//
// GET: /Menu/Details/5

public ActionResult Details(int id = 0)
{
Menu menu = db.Menus.Include("MenuItems").Single<Menu>(m => m.MenuId == id);
List<MenuItem> reesult = new List<MenuItem>();
var result = (from m in db.Menus
join mI in db.MenuItems
on m.MenuItemId equals mI.MenuItemId
select new
{
mI.Name,
mI.ParentMenu,


}).ToList();
if (menu == null)
{
return HttpNotFound();
}
return View(result);
}


Menu-View-Detailsکد

@using LiveTile.Models

@model IEquatable<LiveTile.Models.Menu>


@{
ViewBag.Title = "Details";
}

<h2>Details</h2>

<fieldset>
<legend>Menu</legend>

@if (Model.MenuItems != null && Model.MenuItems.Count > 0)
{
foreach (var item in Model.MenuItems)
{
<div style="border: solid 1px #F0F0F0; margin: 2px">
<div class="comment-author">
Text: @item.Name
</div>
<div class="comment-message">
Action: @item.ActionName
</div>
<div class="comment-message">
Controller: @item.ControllerName
</div>
<div class="comment-message">
Url: @item.Url
</div>

</div>
}
}



<div class="display-label">
@Html.DisplayNameFor(model => model.MenuItemId)
</div>
<div class="display-field">
@Html.DisplayFor(model => model.MenuItemId)
</div>

<div class="display-label">
@Html.DisplayNameFor(model => model.Name)
</div>
<div class="display-field">
@Html.DisplayFor(model => model.Name)
</div>
</fieldset>

<div id="addMenuItem" style="display: inline;">
<div>
@Html.ActionLink("Add Menu Item", "Create", "MenuItem",
new { parentMenuId = Model.MenuId }, null)
</div>
</div>
<p>
@Html.ActionLink("Edit", "Edit", new { id=Model.MenuId }) |
@Html.ActionLink("Back to List", "Index")
</p>

لطفا راهنمایی کنید اشکال کار من کجاست
البته قبل از اینکه اون جوین رو در کنتلر انجام بدم ایتم های منوهارم اضافه میکرد و تو جدول هم اضافه میشد و منوها نمایش داده میشد ولی ایتمهای منو نمایش داده نمیشد
ولی بعد از اضافه کردن جوین واینکه خاستم بصورت لیستی نمایش دهد و IEquatable را اضافه کردم الان دیگه فقط منو را اضافه میکنه و نمایش میده و حتی صفحه details هم نمیاره
خیلی ممنون میشم کمک کنید
یا اینکه اگه روشم درست نیست لطفا اگر جایی که اموزش داده منوی داینامیک اضافه کنیم رو بگید
ممنون