View Full Version : چجوری عنوان یک پست رو بهمراه آی.دی اون رو توی یو.آر.ال جا بدم؟
پروگرامنویس
شنبه 26 خرداد 1397, 20:39 عصر
درود
من از روش زیر برای روتینگ وبسایتم استفاده کردم
حالا میخوام وقتی یک پست رو لود میکنم توی یو.ار.ال همراه با آی.دی پست تایتل پست رو هم قرار بدم.چطور میتونم این کار رو بکنم؟سپاس
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.MapMvcAttributeRoutes();
}
}
[Route("home")]
public class HomeController : Controller
{
//نمایش پست
[Route("loadpost/{id}")]
public ActionResult ShowPost(int id)
{
اینم کدهای ویو
<h3>@Html.ActionLink(Model.oPost.Tittle, "ShowPost", "Home", new {id = Model.oPost.ID }, null)</h3>
hakim22
یک شنبه 27 خرداد 1397, 11:19 صبح
اول باید روت رو تنظیم کنید :
[Route("loadpost/{id}/{title}")]
public ActionResult ShowPost(int id)
{
دوم باید مقدار title رو در لینک به عنوان routeValue پاس بدید
<h3>@Html.ActionLink(Model.oPost.Tittle, "ShowPost", "Home", new {id = Model.oPost.ID,title=Model.oPost.Tittle }, null)</h3>
پروگرامنویس
یک شنبه 27 خرداد 1397, 13:17 عصر
اول باید روت رو تنظیم کنید :
[Route("loadpost/{id}/{title}")]
public ActionResult ShowPost(int id)
{
دوم باید مقدار title رو در لینک به عنوان routeValue پاس بدید
<h3>@Html.ActionLink(Model.oPost.Tittle, "ShowPost", "Home", new {id = Model.oPost.ID,title=Model.oPost.Tittle }, null)</h3>
اتفاقا همین کار رو امتحان کرده بودم.منتهی توی پارمترهای اکشن هم مقدار title رو وارد کرده بودم.الان هم کاری که شما گفتید رو انجام دادم اما در دو حالت خطای زیر رو داد
148400
ببینید من میخوام ادرس دهی یه چیزی مانند زیر بشه یعنی حتی نام اکشن هم نوشته نشه:
www.mysite/Titlepost
یا بصورت زیر
www.mysite/MenuName/SubMenu/TitlePost
unique2017
یک شنبه 27 خرداد 1397, 14:33 عصر
مطلب بسیار عالی و خوب است
پروگرامنویس
یک شنبه 27 خرداد 1397, 15:54 عصر
درود
ایراد بخاطر یه سری بی دقتی از جانب خودم بود که حل شد
اینام کدهای درست :
منو:
// بارگزاری پست ها براساس منو
[Route("{mnu}/{id}")]
public ActionResult GetMenu(int id,int page=1)
{
if (id==0)
{
ViewBag.Error = "نشانی درخواست شده یافت نشد!";
return View("~/Views/Home/ErrorPage.cshtml");
}
PostRepository rpPost = new PostRepository();
CommentRepository rpCmnt = new CommentRepository();
WmHomePage oModel = new WmHomePage();
List<Post> pst = rpPost.Select().ToList();
oModel.CarentPage = page;
oModel.posts = pst.Where(x => x.id_menu == id && x.Is_show==true).OrderByDescending(d => d.Date).ThenByDescending(t => t.Time).Skip((page - 1) * 10).Take(10).ToList();
oModel.TotalItemPost = oModel.posts.Where(x => x.Is_show == true).Count();
oModel.AtachPosts = pst.Where(x => x.FileName != "" && x.Is_show==true).OrderBy(d => d.Date).ThenBy(t => t.Time).Take(3).ToList();
oModel.TopViewPosts = pst.Where(x=>x.Is_show==true).OrderByDescending(s => s.Views).ThenByDescending(d => d.Date).ThenBy(t => t.Time).Take(4).ToList();
oModel.comments = rpCmnt.Where(x => x.Is_show == true).OrderBy(d => d.Date).ThenBy(t => t.Time).Take(5).ToList();
return View(oModel);
}
//--------------------------------
// بارگزاری پستها براساس زیر منو
[Route("{mnu}/{sb}/{id}")]
public ActionResult GetSubMenu(int id, int page=1)
<ul class="ul-main">
@foreach (var item in Model)
{
if (item.Parent == 0)
{
<li class="li-main">
<a href="@Url.Action("GetMenu", "Home", new { id = item.ID, mnu=item.Url }, null)"><i class="@item.Icon"></i> @item.Name </a>
<ul class="ul-sub">
@foreach (var sub in Model)
{
if (sub.Parent == item.ID)
{
<li class="li-sub">
<a href="@Url.Action("GetSubMenu", "Home", new { id = sub.ID,mnu=item.Url,sb=sub.Url }, null)">@sub.Name </a>
</li>
}
}
</ul>
</li>
}
}
</ul>
148403
پست:
//نمایش پست
[Route("{mnu}/{sb}/{ttl}/{id}")]
public ActionResult ShowPost(int id)
{
<h3>@Html.ActionLink(item.Tittle, "ShowPost", "Home", new { id = item.ID,ttl=item.Tittle,mnu=urlmnu,sb=urlsub },null)</h3>
148404
فقط همینجور که می بینید توی یوآرال پست چون سرنام(عنوان) پست فارسی هست آی.دی پست قبل از سرنام درج شده.آیا راهی هست مانند ترتیبی که توی اکشن مشخص کردم آی.دی بعد از سرنام در یوآرال درج شه.(سرنام فارسی باشه)؟
hakim22
یک شنبه 27 خرداد 1397, 16:36 عصر
خطای Ambiguous یعنی دو متد دارید که یک ساختار دارن و MVC نمیدونه کدوم رو اجرا کنه.
[Route("loadpost/{id}/{title}")]
public ActionResult ShowPost(int id,string title)
{
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.